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;
}
};