给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
string longestPalindrome(string s) {
if(s.size()<2){
return s;
}
int len = s.size();
vector<vector<int>> dp(len,vector<int>(len));
int reslen1=0;
int reslen2=0;
int resmax=1;
for(int i=1;i<len;i++){
for(int j=0;j<i;j++){
if(s[i]==s[j]&&(dp[j+1][i-1]||i-j<=2)){
dp[j][i]=true;
if(i-j+1>resmax){
reslen1=j;
reslen2=i;
resmax=i-j+1;
}
}
}
}
return s.substr(reslen1,resmax);
}
};
思路:
本题用动态规划来写
双指针i,j。当i,j存在的位置字符串相等或者dp[j+1][i-1]=true或者i-j<=2时
dp[i][j]=true
最长回文串为截取s字符串的 回文串的开始位置到最长回文串的长度。