码迷,mamicode.com
首页 > 其他好文 > 详细

最长回文子串问题

时间:2014-07-14 21:09:05      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   for   问题   

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

 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 }

 

完!

 

最长回文子串问题,布布扣,bubuko.com

最长回文子串问题

标签:style   blog   color   os   for   问题   

原文地址:http://www.cnblogs.com/zmlctt/p/3842710.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!