CF319D题解
题意
给定一个字符串 XX(相邻并且相同的两个子串)变为X,问最后不能继续操作的字符串是什么。
思路
本题数据较水,暴力就可以过。
每次操作寻找相同的子串,两层循环分别枚举两个相同子串的长度、子串的起始下标,再判断两个子串是否相等,相等即删除其中一半。
通过 find_ 函数,用 while 循环来重复进行操作,如果 find_ 函数没有找到符合要求的子串,返回 false,即可结束操作。
最后输出剩下的字符串即可。
代码
#include <bits/stdc++.h>
#define ls s.size()
using namespace std;
string s;
bool find_() {
for (unsigned i = 1; i <= ls / 2; i ++) {
for (unsigned j = 0; j < ls - i + 1; j ++) {
bool flag = true;
for (unsigned k = 0;k < i;k ++) {
if (s[j + k] != s[j + i + k]) {
flag = false;
break;
}
}
if (flag) {
s.erase(j,i);
return true;
}
}
}
return false;
}
int main() {
cin >> s;
while (find_()) {
}
cout << s << endl;
return 0;
}