题目大意:
给定一个字符串,每次把最靠左的连续两个字串删掉一个,问最终的字符串。
本刚看这道题的蒟蒻被一个时限 $6s$ 的紫题给惊呆了……
这道题的思路真的真的很简单,暴力都能过,根据题意模拟,用双循环枚举重复单个子串的长度和重复子串的位置即可。不过还是要注意一下枚举的范围,子串长度是从 $0$ 到字符串长度的一半(最多就是两个子串重复构成的字符串),初始范围是从 $0$ 到字符串长度减去当前枚举的子串长度。
这里奉上一个最短代码。
#include<bits/stdc++.h>
using namespace std;
string s;
int main(){
cin>>s;
for(int len=1;len<=(s.size()>>1);len++)//枚举长度。s.size()/2改成s.size()>>1更快
for(int i=0;i<=s.size()-len;i++)//枚举位置
if(s.substr(i,len)==s.substr(i+len,len))如果这两段是相同的
s.erase(i--,len);//删掉前面的那个串。i--是为了一删到底,有可能删了之后还能继续删
cout<<s;
return 0;
}
对了,真的很水,建议降级。