[leetcode]5最长回文子串

这道题就是很简单的模拟思想,把我们人的正常思维用电脑模拟出来即可

如果我们寻找回文字符串,首先我们会想法找到回文的中心,然后从中心向两侧扩散寻找,因此代码就是简单的从中间向两边。

需要特殊处理的是回文字符串的奇偶性,长度为奇数那么以一个字母为中心,如果是偶数就是两个,需要分别判断。

最后因为有一个空输入,可以单独处理。

 1 char* longestPalindrome(char* s) {
 2     int i=0,l,r;
 3     int max=1;
 4     int l0=0,r0=0;
 5     if(s[0]=='\0')
 6         return s;
 7     while(s[i]!='\0')
 8     {
 9         //判断偶数回文
10         if(s[i]==s[i+1])
11         {
12             l=i;
13             r=i+1;
14             while(((l-1)>=0)&&(s[r+1]!='\0')&&(s[l-1]==s[r+1]))
15             {
16                 l--;
17                 r++;
18             }
19             if(max<(r-l+1))
20             {
21                 max=r-l+1;
22                 l0=l;
23                 r0=r;
24             }
25                 
26             
27             
28         }
29         //判断奇数回文
30         
31         l=i-1;
32         r=i+1;
33         
34         if((l>=0)&&(s[l]==s[r]))
35         {
36             while(((l-1)>=0)&&(s[r+1]!='\0')&&(s[l-1]==s[r+1]))
37             {
38                 l--;
39                 r++;
40             }
41             if(max<(r-l+1))
42             {
43                 max=r-l+1;
44                 l0=l;
45                 r0=r;
46             }
47                 
48         }
49         i++;
50     }
51     
52     for(i=0;i<max;i++)
53     {
54         s[i]=s[l0+i];
55     }
56     s[i]='\0';
57     return s;
58 }

 

posted @ 2019-03-17 19:14  冷血无情康纳酱  阅读(104)  评论(0编辑  收藏  举报