对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s",于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
虽然是水题,但还是错了几遍。贴上来警示下自己。
错误原因:没考虑到对称串是偶数的情况。
//Asimple
#include <bits/stdc++.h>
#define INF 0xfffffff
#define mod 10007
#define swap(a,b,t) t = a, a = b, b = t
#define CLS(a, v) memset(a, v, sizeof(a))
#define debug(a) cout << #a << " = " << a <<endl
using namespace std;
inline int abs(int x) { return x<?-x:x; }
typedef long long ll;
const int maxn = ;
char str[maxn]; void solve() {
int len = strlen(str);
int ans = , cnt;
for(int i=; i<len; i++) {
int in = , cnt = ;
while( i-in>= && i+in<len && str[i-in]==str[i+in] ) {
in ++;
cnt += ;
}
ans = max(ans, cnt);
in = , cnt = ;
while( i-in>= && i+in-<len && str[i-in]==str[i+in-] ) {
in ++;
cnt += ;
}
ans = max(ans, cnt);
}
cout << ans << endl;
} void input() {
gets(str);
solve();
} int main() {
input();
return ;
}