原题目:https://leetcode-cn.com/problems/longest-palindromic-substring/
思路:
动态规划的方法,s[i:j]是回文字符串的前提是s[i+1:j-1]是回文并且s[i]==s[j]。
注意边界条件,s[i,i] 回文的长度是1,s[i,i+1]的回文长度是(s[i]==s[i+1])
我们从每一个位置i,len从小到大进行判断就可以了
代码:
class Solution {
public:
string longestPalindrome(string s) {
int n = s.size();
vector<vector<int>> dp (n,vector<int>(n));
string ans;
for(int len = 0;len<n;len++){
for(int i=0;i<n-len;i++){
int j = len+i;//判断i到j的字符串
if(len==0)
dp[i][j]=1;
else if(len==1) dp[i][j] = (s[i]==s[j]);
else{
dp[i][j] = dp[i+1][j-1] && (s[i]==s[j]);
}
if(dp[i][j] && ans.size()<len+1){
ans = s.substr(i,len+1);
}
}
}
return ans;
}
};