经典的动态规划。dp[i][j]代表着从i开始到j为止的子串是不是回文串, l代表回文串长度。
状态转移方程:dp[i][j] = 1, l == 1dp[i][j] = A[i] == A[j], l == 2 or l == 3dp[i][j] = dp[i + 1][j - 1] && A[i] == A[j], else
class Solution {
public:
int getLongestPalindrome(string A, int n) {
int dp[n][n], j, max = 0;
for(int l = 1; l <= n; l++)
{
for(int i = n - l; i >= 0; i--)
{
j = i + l - 1;
if(l == 1) dp[i][j] = 1;
else if(l == 2 || l == 3) dp[i][j] = A[i] == A[j];
else dp[i][j] = dp[i + 1][j - 1] && A[i] == A[j];
if(l > max && dp[i][j] == 1) max = l;
}
}
return max;
}
};


京公网安备 11010502036488号