最长回文子串。
中心:以这个串的每个字符为中心,往两边走,边走边判断,等则继续,不等就跳出;
#include<stdio.h>
#include<string.h>
char a[5000];
int main()
{
int i,j,k,l,max1,max2,x,y,x1,y1,x2,y2;
int n;
scanf("%d",&n);
getchar();
while(n--)
{
max1=0;
max2=0;
x1=0;
x2=0;
y1=0;
y2=0;
gets(a);
l=strlen(a);
for(i=0; i<l; i++)
{
for(j=i+1,k=i-1; j<l&&k>=0; j++,k--)
{
if(a[j]!=a[k])
break;
}
if(j-1-k-1>max1)
{
x1=k+1;
y1=j-1;
max1=j-1-k+1;
}
for(j=i+1,k=i; j<l&&k>=0; j++,k--)
{
if(a[j]!=a[k])
break;
}
if(j-1-k-1>max2)
{
x2=k+1;
y2=j-1;
max2=j-1-k+1;
}
}
if(max1>max2)
{
x=x1;
y=y1;
}
else
{
x=x2;
y=y2;
}
for(i=x; i<=y; i++)
printf("%c",a[i]);
printf("\n");
}
return 0;
}