1040 Longest Symmetric String (25 分)
Given a string, you are supposed to output the length of the longest symmetric sub-string. For example, given Is PAT&TAP symmetric?
, the longest symmetric sub-string is s PAT&TAP s
, hence you must output 11
.
Input Specification:
Each input file contains one test case which gives a non-empty string of length no more than 1000.
Output Specification:
For each test case, simply print the maximum length in a line.
Sample Input:
Is PAT&TAP symmetric?
Sample Output:
11
#include<bits/stdc++.h>
using namespace std;
char s[3000],c;
int sj = 0, p[3000] = { 0 },mx=0,id,len=1;
int main() {
s[sj++] = '\n';
while (scanf("%c",&c)!=EOF) {
s[sj++] = c;
s[sj++] = '\n'; //s的首尾字符要一致,不然偶数串错误
}
s[sj] = '\0';
for (int i = 1; i < sj; i++) {
if (i < mx) p[i] = min(p[id * 2 - i], mx - id);
else p[i] = 1;
while (s[i - p[i]] == s[i + p[i]])++p[i];
if (p[id] < p[i]) {
id = i;
mx = p[i] + i;
}
len = max(len, p[i] - 1);
}
cout << len;
return 0;
}