对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定
Is PAT&TAP symmetric?
,最长对称子串为s PAT&TAP s
,于是你应该输出11。输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
对称子序列,可以通过枚举中心点来实现。
#include <bits/stdc++.h>
#define rep(i, a, b) for(int i = a; i <= b; ++ i)
#define per(i, a, b) for(int i = a; i >= b; -- i)
#define CLS(a, v) memset(a, v, sizeof(a))
#define int long long
using namespace std;
map<string,string> ne;
map<string,int> va;
signed main()
{
char s[1010];
cin.getline(s+1,1009);
int n = strlen(s+1);
int ans = -1;
rep(i,1,n){ // 枚举中心点
int cha = 1,cnt = 1;
while(i-cha >= 1 && i + cha <= n && s[i-cha] == s[i+cha]){
cha++;
cnt += 2;
}
ans = max(ans,cnt);
cnt = 0; cha = 1;
while(i-cha >= 1 && i + cha - 1 <= n && s[i-cha] == s[i+cha-1]){
cha++;
cnt += 2;
}
ans = max(ans,cnt);
}
cout << ans << endl;
return 0;
}