经典的动态规划。
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;
    }
};