思路很简单,就是通过向两边扩展的方法,找出最大的,注意要分成奇数和偶数两种情况,都要计算才行。
1 //最长回文子串,就是利用了回文数的另一种思想,从中间想两边扩展的思想,很有意思 2 #include <iostream> 3 using namespace std; 4 5 int maxhuiwenzichuang(char * A,int n) 6 { 7 if(A==NULL||n<=0) 8 { 9 cout<<"wrong"<<endl; 10 return -1; 11 } 12 int maxnum=0; 13 for(int i=0;i<n;i++) 14 { 15 int j=0; 16 while(i-j>=0&&i+j<=n-1) //j从0开始扩展,有一个不满足就退出循环caba 17 { 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) //偶数情况如abbac 29 { 30 if(A[i-j]==A[i+j+1]) 31 j++; 32 else 33 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"<<endl; 50 else 51 cout<<"maxnum= "<<max<<endl; 52 system("pause"); 53 }
完!