void huiwen(const char *p){
int n = strlen(p);
int maxlen = 0;
int l,r;
int start=0;
bool flag=0;
char res[BUFFSIZE];
for(int i=1;i<n;++i){
int curLen=0;
l=i-1;
if(p[i]==p[i+1])
{
r=i+2;//偶回文
flag=0;
}
else
{
r=i+1;//奇回文
flag=1;
}
while(l>=0 && r<n && p[l]==p[r]){
--l;
++r;
++curLen;
}
if(0==flag){
if(2*(curLen+1)>maxlen){
start=l+1;
maxlen=2*(curLen+1);
}
}else{
if((2*curLen+1)>maxlen){
start=l+1;
maxlen=2*curLen+1;
}
}
}
memmove(res,p+start,maxlen);
res[maxlen]='\0';
printf ("longest huiwen string is: %s\n", res);
}
给定一个字符串,找出其中的最长回文子串。所谓的最长回文子串就是正着读和反着读都是一样的字符串。
例如:abccbabcddcba,最长的为abcddcba,长度为8。
最长回文子串存在两种情况:奇回文和偶回文。上面的例子是偶回文,abcba这样的就是奇回文。
解决这个问题的最简单思路是,以每个字符为中心左右暴力依次判断,时间复杂度最坏是O(n^2).
代码如下: