7-64 最长对称子串(25 分)
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?
,最长对称子串为s PAT&TAP s
,于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
/*#include<stdio.h>
#include<string.h>
int main(void)
{
char a[1001];
gets(a);
int k,i,j,max=1,n,m,cont;
k=strlen(a);
for(i=0;i<k-1;i++)
{
for(j=k-1;j>=i;j--)
{ if(a[i]==a[j]&&j-i>0)
{
if(j%2!=i%2) //==偶数列 0 1 2 3
{
n=(j-i)/2;
if(n==0) max = ((n+1)*2 > max) ? (n+1)*2 : max;
for(m=1;m<=n;m++)
{ if(a[i+m]!=a[j-m]) break;
else max = (j-i+1 > max) ? j-i+1 : max;
//printf("%d %d %d %d\n",j,i,n,m);
}
}
if(j%2==i%2) //--奇数列 0 1 2 3 4
{
n=(j-i)/2;
for(m=1;m<=n;m++)
{ if(a[i+m]!=a[j-m]) break;
else max = (m*2+1 > max) ? m*2+1 : max;
}
}
}
}
}
printf("%d",max);
return 0;
}*/
#include<stdio.h>
#include<string.h>
int main (){
char a[1002];
gets(a);
int len;
len=strlen(a);
int i;int x;int y;
int max=1;int ans;
for(i=1;i<len-1;i++){
x=i-1;y=i+1;
ans=1;
while(a[x]==a[y]&&x>=0&&y<=len){
x-=1;
y+=1;
ans+=2;
}
if(ans>max)
max=ans;
}
for(i=0;i<len-1;i++){
x=i;y=i+1;
ans=0;
while(a[x]==a[y]&&x>=0&&y<=len){
x-=1;
y+=1;
ans+=2;
}if(ans>max)
max=ans;
}
printf("%d",max);
return 0;
}