P1210蒟蒻求助(玄关)
查看原帖
P1210蒟蒻求助(玄关)
1116014
shimucheng楼主2024/7/6 20:02

代码如下:

#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;
}

请各位大佬帮忙(请在我的原代码的基础上修改)

2024/7/6 20:02
加载中...