class Solution {
public:
    //思路:对于一个子串而言,如果它是回文串,并且长度大于2,那么将它首尾的两个字母去除之后,它仍然是个回文串。
    //对于长度为1的子串,它显然是个回文串;对于长度为2 的子串,
    //只要它的两个字母相同,它就是一个回文串。用于建立边界条件
    int getLongestPalindrome(string A, int n) {
        //如若输出回文子串,返回ret即可
        vector<vector<int>> r(n,vector<int>(n));
        string ret;
        int back;
        //创建矩阵在r中保存当前r[i][j]是否是回文子串,判定的依据为r[i+1][j-1]==1且A[i]==A[j]
        for(int d=0;d<n;d++)
        {
            for(int i=0;i<n-d;i++)
            {
                int j=i+d;
                if(d==0)
                    r[i][j]=1;
                else if(d==1)
                    r[i][j]=(A[i]==A[j]);
                else
                    r[i][j]=(A[i]==A[j]&&r[i+1][j-1]==1);
                if(r[i][j]&&d+1>ret.size())
                {
                    ret=A.substr(i,j-i+1);//将A中从i开始的长度为j-i+1的元素赋给ret
                    back=j-i+1;
                }
            }
        }
        return back;
    }
};