一.题目
1.输入描述:
2.输出描述:
N行,每行包括一个被修复后的字符串。
3.输入例子1:
4.输出例子1:
二.题解
1.题解思路:
从前往后遍历,2种情况下,新字符需要舍弃:
- woo+o:连续3个字符相同,若记新增字符下标为i,则s[i-2]=s[i-1]=s[i](i>=3);
- wwo+o:连续两对相同,即s[i-3]=s[i-2]且s[i-1]=s[i](i>=4);
2.题解代码:
#include <iostream>
#include <string>
using namespace std;
int main(){
int n;
cin>>n;
string s;
while(n--){
cin>>s;
int j=0;
for(int i=0;i<s.size();i++){
s[j++]=s[i]; //j还没用
if(j>=3&&s[j-1]==s[j-2]&&s[j-2]==s[j-3])
j--;
if(j>=4&&s[j-1]==s[j-2]&&s[j-3]==s[j-4])
j--;
}
s.erase(s.begin()+j,s.end());
cout<<s<<endl;
}
}
题目来源:牛客网
https://www.nowcoder.com/