思路很简单,就是通过向两边扩展的方法,找出最大的,注意要分成奇数和偶数两种情况,都要计算才行。

 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 }

 

完!

 

 posted on 2014-07-14 14:51  zmlctt  阅读(220)  评论(0编辑  收藏  举报