2012华为2011年9月17日上机题目之最长回文

一段字符串中提取最长的回文长度:

浅显易懂的想法就是假设任何一个位置的字符为回文中心,进行两个方向的扩散,进而提取最长回文。

这是最朴素的想法:

代码如下:

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 char str[100]="abbbbaaa";
 6 
 7 
 8 //如果是回文长度是偶数个 
 9 int getMidtwoNum(char* s,int length,int index)
10 {
11     int re=1;
12     int t=index,b=index+1;
13     while(t>=0&&b<length&&s[t]==s[b])
14     {
15         if(t==index)
16             re++;
17         else
18             re+=2;
19         b++;
20         t--;
21     }
22     return re;
23 }
24 
25 //回文长度是奇数个 
26 int getMidoneNum(char* s,int length,int index)
27 {
28     int re=1;
29     int t=index-1,b=index+1;
30     while(t>=0&&b<length&&s[t]==s[b])
31     {
32         re+=2;
33         b++;
34         t--;
35     }
36     return re;
37 }
38 
39 int getLhw(char* s)
40 {
41     int length=strlen(s);
42     int re=0;
43     int temp=0;
44     for(int i=0;i<length;i++)
45     {
46         temp=max(getMidoneNum(s,length,i),getMidtwoNum(s,length,i));
47         if(temp>re)
48         {
49             re=temp;
50         }
51     }
52     return re;
53 }
54 int main()
55 {
56     cout<<getLhw(str)<<endl;
57     getchar();

58 } 

posted @ 2011-09-17 23:06  Eric.wei  阅读(971)  评论(0编辑  收藏  举报