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