题目链接:万万没想到之聪明的编辑
题意:
处理一个字符串
1. 三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello
2. 两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的一个字母就好啦:比如 helloo -> hello
3. 上面的规则优先“从左到右”匹配,即如果是AABBCC,虽然AABB和BBCC都是错误拼写,应该优先考虑修复AABB,结果为AABCC
解题思路:
一个指针负责处理原字符串,一个指针负责进行答案字符串的生成
#include <bits/stdc++.h>
using namespace std;
char s[1000001];
int main(){
int n;
cin >> n;
while(n--){
cin >> s;
int len = strlen(s), k = 0;
for(int i = 0; i < len; i++){
s[k++] = s[i];
if(k>=3 && s[k-3]==s[k-2] && s[k-2]==s[k-1]){ // 当连续出现3次时
k--;
}
if(k>=4 && s[k-4]==s[k-3] && s[k-2]==s[k-1]){ // 当出现两个连续为两个时
k--;
}
}
s[k] = '\0'; // 设置结束符
cout << s << endl;
}
return 0;
}