这题可以用马拉车的,但是现在忘了,写一个暴力吧。
题目描述:
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
思路:
可以以每个字母为对称字符中心进行扩展,分为两种情况:
1、以该字符为中心的对称字符串长度为奇数时:该字符串两边对应相等。
2、以该字符为中心的对称字符串长度为偶数时:因为从左到右遍历,规定s[i-1]=s[i]时才能是对称字符串,然后判断 s[ i - 2 ]= s [ i +1] ,以此类推。
代码;
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
char s[1005];
int main()
{
cin.get(s,1005);
int len = strlen(s);
int t,k,ans=1;
for(int i=1; i<len; i++)
{
t = 1;
for(int j=1; j<len; j++)
{
if(i-j<0 || i+j>=len || s[i-j]!=s[i+j]) break;
t+=2;
}
ans = ans>t?ans:t;
t=0;
for(int j=1; j<len; j++)
{
if(i-j<0 || i+j-1>=len || s[i-j]!=s[i+j-1]) break;
t+=2;
}
ans = ans>t?ans:t;
}
printf("%d\n",ans);
return 0;
}