个人主页:兜里有颗棉花糖
欢迎 点赞 收藏✨ 留言✉ 加关注本文由 兜里有颗棉花糖 原创
收录于专栏【手撕算法系列专栏】【LeetCode】
本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助
希望我们一起努力、成长,共同进步。
点击直接跳转到该题目
给你一个字符串 s
,找到 s
中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例2:
输入:s = “cbbd”
输出:“bb”
注意:
1 <= s.length <= 1000
s 仅由数字和英文字母组成
本题目其实就是回文字串的加强版。所以这里就对本题目进行简单描述啦!!!
首先:我们要判单[i,j]
区间字串时候是回文串(此步骤就是回文字串那道题目),最后我们只需要返回长度最大的回文字串就可以啦!!!
返回值:
s.substr(begin,len)
class Solution {
public:
string longestPalindrome(string s) {
int n = s.size();
vector<vector<bool>> dp(n,vector<bool>(n));
int len = 1,begin = 0;
for(int i = n - 1;i >= 0;i--)
{
for(int j = i;j < n;j++)
{
if(s[i] == s[j])
dp[i][j] = i + 1 < j ? dp[i + 1][j - 1] : true;
if(dp[i][j] && j - i + 1 > len) len = j - i + 1,begin = i;
}
}
return s.substr(begin,len);
}
};
最后也是顺利通过啦!!!