经典的动态规划。dp[i][j]
代表着从i
开始到j
为止的子串是不是回文串, l
代表回文串长度。
状态转移方程:dp[i][j] = 1, l == 1
dp[i][j] = A[i] == A[j], l == 2 or l == 3
dp[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; } };