参考链接:http://taop.marchtea.com/01.05.html
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
给定一个字符串,求它的最长回文子串的长度,并打印出最长回文子串
*/
int main()
{
char str[99]="test";
gets(str);
int strLength=strlen(str);
int maxStr=0;
int tempMax=0;
int startMax=0;
for(int i=0;i<strLength;++i){
//字符串是奇数个
for(int j=0;i-j>=0&&j+i<strLength;++j){
if(str[i-j]!=str[i+j])
break;
tempMax=j*2+1;
}
if(tempMax>maxStr){
startMax=i;//此时记录最大回文串的中间位置
maxStr=tempMax;
}
//字符串是偶数个
for(int j=0;i-j>=0&&i+j+1<strLength;++j){
if(str[i-j]!=str[i+j+1])
break;
tempMax=j*2+2;
}
if(tempMax>maxStr){
startMax=i;//此时记录最大回文串的中间位置
maxStr=tempMax;
}
}
printf("maxstr=%d\n",maxStr);
if(maxStr%2==0){
startMax=startMax-maxStr/2+1;//此时记录最大回文串的起始位置,便于打印
for(int k=startMax;k<startMax+maxStr;++k){
printf("%c",str[k]);
}
}
else{
startMax=startMax-maxStr/2;//此时记录最大回文串的起始位置
for(int k=startMax;k<startMax+maxStr;++k){
printf("%c",str[k]);
}
}
return 0;
}