5.最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
class Solution {
public:
string longestPalindrome(string s) {
int len = s.length()-1;
int dp[len+5][len+5];
int maxLenth = 1;
memset(dp,0,sizeof(dp));
int leftSide = 0 ;
for(int i = 0 ;i <= len;i++) dp[i][i] = 1;
for(int L = 2 ;L <= len+1 ;L++){ // 枚举字串的长度
for(int i = 0 ;i<= len ;i++){ // 枚举字串左边界
int j = i + L -1; // 枚举字串右边界
if(j > len) break;
if(s[i] == s[j]){
if(j - i < 3 || dp[i+1][j-1]){// 如果字串的长度为 2 或 3 或者 子串的字串是回文
if(L > maxLenth){
maxLenth = L;
leftSide = i;
rightSide = j;
}
dp[i][j] =1;
}
}
}
}
return s.substr(leftSide,maxLenth);
}
};
说明
回文字符串是天生具有递推关系的一类字符串,判定一个字符串是否是回文字符串,只需要判定其去掉两端字符之后是否是一个回文字符串