题目
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
测试点预测:
sample等价
多段对称
偶数对称
全不对称
单个字符
主要使用了循环,分支,数组。
#include<stdio.h>
int main()
{
int i=0;
char str[1001];
int j,k;
int count = 0;
int max=0;
int sum=0;
int m;
int n;
while((str[i]=getchar())!='\n')
{
i++;
} //输入
if(i==1)
{
printf("1");
return 0;
} //单字符
for(j=0;j<=i-1;j++)
{
for(k=i-1;k>j;k--) //双循环从左右两端开始遍历
{
m=k;
n=j; //把j.k赋值进行操作,一定不能直接操作k,j
count=0;
while(str[n]==str[m])
{ count+=2;
n+=1;
m-=1;
if(n==m||n-1==m) //考虑奇数串和偶数串
{
break;
}
}
if(n==m)
{
count++;
sum=count;
}
else if(n-1==m)
{
sum=count; //对奇数串和偶数串分别讨论
}
if(sum>max)
{
max=sum; //收集最大值
}
}
}
if(max==0)
{
printf("1");
return 0; //考虑全不对称串
}
printf("%d",max);
return 0;
}