给你一个字符串 s
,找到 s
中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母组成
class Solution {
public:
string longestPalindrome(string s) {
int n=s.length();
if(n==1) return s;
int maxLen=1;
int begin=0;
vector<vector<bool>> dp(n,vector<bool>(n));
for(int i=0;i<n;i++)
dp[i][i]=true;
//递推开始
for(int l=2;l<=n;l++)//l为长度
for(int i=0;i<n;i++)//i为起点
{
int L=l+i-1;//L为距离
if(L>=n) break;//越界就break掉
if(s[i]!=s[L])//不相等不是回文字符串
{
dp[i][L]=false;
}
else{
if(L-i<3){
dp[i][L]=true;//当只有2个元素并且相等时
}
else dp[i][L]=dp[i+1][L-1];//状态转移
}
if(dp[i][L]&&(L-i+1)>maxLen){
maxLen=L-i+1;
begin=i;
}
}
return s.substr(begin,maxLen);
}
};