题目:最长回文子串
前沿: 这个题目需要考虑回文串的特性,也就是两端去掉的字符后,里面仍然是回文子串的形式,这里给出DP的一种解法,主要状态转移方程如下:
结果的计算考虑每次迭代记录最长的符合的长度。
Note:迭代方式考虑到解的分解,所以需要考虑采用按照长度进行迭代的方式进行迭代。
代码:
class Solution {
public:
int getLongestPalindrome(string A, int n) {
vector<vector<bool>> dp(n, vector<bool>(n, false));
for(int i=0;i<n;i++) dp[i][i]=true;
for(int i=0;i<n-1;i++) if(A[i]==A[i+1]) dp[i][i+1]=true;
int ans = 0;
for(int k=2;k<n;k++)
for(int i=0;i<n-k;i++)
if(A[i]==A[i+k] && dp[i+1][i+k-1]==true){ //判断
dp[i][i+k] = true;
ans = k+1; //解决问题
}
return ans;
}
};