这道题就是很简单的模拟思想,把我们人的正常思维用电脑模拟出来即可
如果我们寻找回文字符串,首先我们会想法找到回文的中心,然后从中心向两侧扩散寻找,因此代码就是简单的从中间向两边。
需要特殊处理的是回文字符串的奇偶性,长度为奇数那么以一个字母为中心,如果是偶数就是两个,需要分别判断。
最后因为有一个空输入,可以单独处理。
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 }
原文:https://www.cnblogs.com/trickofjoker/p/10548362.html