最长回文串
char * longestPalindrome(char * s){
int len=strlen(s),st=0,max=0;
for (int i=0;i<len;i++){
int l=i-1,r=i+1;
while(l>=0&&r<len&&s[l]==s[r]){
l--; r++;
}
if (r-l-1>max) {
st=l+1;
max=r-l-1;
}
}
for (int i=0;i<len;i++) {
int l= i, r = i + 1;
while (l>=0 &&r<len&&s[l]==s[r]) {
l--,r++;
}
if (r-l-1>max){
st=l+1;
max=r-l-1;
}
}
s[st+max]='\0';
return s+st;
}
先判断字符串长度,如果小于2一定是回文数,然后在判断困难的情况,对于较长的字符串,我的想法是采用左右比较法(名字是自己起的),顾名思义,不仅要从一个点切入,还要比较两边的对称性,更要记录当前最长字符串的中心和半径,最后通过最终的中心和半径找到目标字符串的起点。
这道题还有别的解法 ,我简单阐述一下思路 ,复习的时候可以去查资料,马拉车算法,就是在字符串里面和两边插入字符,这样使字符串的长度恒为2n+1,也就是恒为奇数,这样就可以免去讨论两种情况了。