5-12 最长对称子串 (25分)
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
我的理解:这道题可以直接用暴力,但是在暴力的时候要分字符串长度是奇数还是偶数的情况,把两种情况都跑一遍,区最大的对称长度就行了
#include <stdio.h>
#include <string.h>
int main()
{
char a[1010];
memset(a,0,sizeof(a));
gets(a);
int len=strlen(a);
int sum=1;
for(int i=1;i<len-1;i++)
{
int p=i-1;
int q=i+1;
int sum1=1;
while(p>=0&&q<len)
{
if(a[p]==a[q])
{
p--;
q++;
sum1+=2;
}
else
{
break;
}
}
if(sum1>sum)
{
sum=sum1;
}
}
for(int i=0;i<len;i++)
{
int p=i;
int q=i+1;
int sum1=0;
while(p>=0&&q<len)
{
if(a[p]==a[q])
{
p--;
q++;
sum1+=2;
}
else
{
break;
}
}
if(sum1>sum)
{
sum=sum1;
}
}
printf("%d\n",sum);
return 0;
}