L2-008. 最长对称子串
时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定”Is PAT&TAP symmetric?”,最长对称子串为”s PAT&TAP s”,于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
#include<iostream>
#include<string.h>
using namespace std;
char a[2000];
int sum1;
int sum2;
int dfs(int l,int t,int r)//奇数
{
if(l<0||r>=strlen(a))
return 0;
if(a[r]==a[l])
{
sum1++;
dfs(l-1,t,r+1);
}
else
return 0;
}
int dfs(int l,int r)//偶数
{
if(l<0||r>=strlen(a))
return 0;
if(a[r]==a[l])
{
sum2++;
dfs(l-1,r+1);
}
else
return 0;
}
int main()
{
int i,j,max1=-1,max2=-1;
int temp1=0,temp2=0;
sum1=0;//假如输入aaaa会不仅执行奇数还执行偶数,所以要取两种情况中结果的最大值
sum2=0;
gets(a);
for(i=0;i<strlen(a);i++)
{
sum1=0;
sum2=0;
if(a[i-1]==a[i+1])//奇数
{
dfs(i-1,i,i+1);
if(max1<(sum1*2+1))
{
max1=sum1*2+1;
}
}
if(a[i]==a[i-1])//偶数
{
dfs(i-1,i);
if(max2<sum2*2) max2=sum2*2;
}
}
if(max1==max2&&max2==-1)//假如输入as两个dfs不执行,此时标记都为-1 一开始没考虑到
cout<<1<<endl;
else if(max1>=max2)
cout<<max1<<endl;
else
cout<<max2<<endl;
}