class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param A string字符串
     * @return int整型
     */
    int getLongestPalindrome(string A) {
        int len = A.length();
        vector<vector<int> > dp(len, vector<int>(len,
                                0));// dp[i][j]:i~j字符串是否回文
        for (int i = 0; i < len; i++) {
            dp[i][i] = 1;
        }
        for (int m = 1; m < len; m++) { // 子串:01,12,23;02,13;03(根据这个画一遍就会了)
            for(int i=0; i<len-m; i++) {
                int j=i+m;//沿主对角线方向
                if(abs(i-j) == 1 && A[i] == A[j]) {
                    dp[i][j] = 1;
                    continue;
                }
                if(A[i] == A[j] && dp[i+1][j-1] == 1) {
                    dp[i][j] = 1;
                } else {
                    dp[i][j] = 0;
                }
            }
        }
        int max = 0;
        for(int i=0; i<len; i++) {
            for(int j=0; j<len; j++) {
                if(dp[i][j] == 1 && (j-i)>max) {
                    max = j-i;
                }
            }
        }
        return max+1;
    }
};

恶心心的题目,看了解析还是花了好久才搞出来。