代码如下:
#include <bits/stdc++.h>
using namespace std;
char st[20005], s[20005];
int pos[20005], len, maxx, be, ed;
int main () {
char c;
while ((c=getchar()) != EOF) st[len++] = c;
//预处理
int j = 0;
for (int i = 0; i < len; i++)
if (isalpha(st[i])) {
s[j] = tolower(st[i]);
pos[j++] = i;
}
//枚举中点
for (int i = 0; i < j; i++) {
//串长为奇,向两边扩展k个字符
for (int k = 0; i - k >= 0 && i + k < j; k++) {
if (s[i - k] != s[i + k]) break;//不相等一定不是回文
if (2 * k + 1 > maxx) {
maxx = 2 * k + 1;
be = pos[i - k];
ed = pos[i + k];
}
}
//串长为偶
for (int k = 0; i - k >= 0 && i + k + 1 < j; k++) {
if (s[i - k] != s[i + k + 1]) break;//不相等一定不是回文
if (2 * k + 2 > maxx) {
maxx = 2 * k + 2;//同时向两边增加k个数,再加上自己
be = pos[i - k];
ed = pos[i + k + 1];
}
}
}
cout << maxx << endl;
for (int i = be; i <= ed; i++) cout << st[i];
return 0;
}
请各位大佬帮忙(请在我的原代码的基础上修改)