思路很简单,就是通过向两边扩展的方法,找出最大的,注意要分成奇数和偶数两种情况,都要计算才行。
1 //最长回文子串,就是利用了回文数的另一种思想,从中间想两边扩展的思想,很有意思 2 #include3 using namespace std; 4 5 int maxhuiwenzichuang(char * A,int n) 6 { 7 if(A==NULL||n<=0) 8 { 9 cout<<"wrong"< =0&&i+j<=n-1) //j从0开始扩展,有一个不满足就退出循环caba17 {18 if(A[i-j]==A[i+j])19 j++;20 else //找到补登的也退出循环21 break;22 }23 j--; //注意j多加了,要减一才行24 int jishu=2*j+1; //奇数时个数25 if(jishu>maxnum)26 maxnum=jishu;27 j=0;28 while(i-j>=0&&i+j+1<=n-1) //偶数情况如abbac29 {30 if(A[i-j]==A[i+j+1])31 j++;32 else33 break;34 }35 j--;36 int oushu=2*j+2;37 if(oushu>maxnum)38 maxnum=oushu;39 }40 return maxnum;41 }42 43 int main()44 {45 int n=8;46 char A[]={ 'a','b','b','a','c','a','b','b'};47 int max=maxhuiwenzichuang(A,8);48 if(max==-1)49 cout<<"wrong"<
完!