AT2647 [ABC066B] ss 题解

题意简述


输入一个字符串 SS,查找可以通过从 SS 的末尾删除一个或多个字符获得的最长偶数字符串的长度。

输出这个非空字符串的长度。

解题思路


注意到范围:2s2002 \leqslant |s| \leqslant 200。果断选择暴力。

外层 forfor 从大到小循环枚举长度,再用内层 forfor 循环枚举两个字符串是否一致。

小心,长度不能从 len2\dfrac{len}{2} 开始枚举,因为必须要删去一些字符,所以我的代码从 len21\dfrac{len}{2}-1 开始枚举,从 len12\dfrac{len-1}{2} 同理。

代码实现


#include<bits/stdc++.h>
using namespace std;
string str; int len;
int main() {
	cin>>str; len=str.size();
	for(int i=len/2-1;i>=1;i--) {
		bool pd=false;
		for(int j=0;j<i;j++)  {
			if(str[j]!=str[i+j])  {
				pd=true; break;
			}
		}
		if(!pd) {
			printf("%d",i*2);
			return 0;
		}
	}
	return 0;
}
//code by TheCedar