题目链接
双指针算法可以在O(n)内删除字符串的某一元素(从前到后扫一遍)
i,j是每次向后推进一位,如果满足条件就j–
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
char str[N];
int main(){
int n;
cin>>n;
while(n--){
cin>>str;
int j=0;
for(int i=0;str[i];i++){
str[j++]=str[i]; //j还没用
if(j>=3&&str[j-1]==str[j-2]&&str[j-2]==str[j-3]) j--;
if(j>=4&&str[j-1]==str[j-2]&&str[j-3]==str[j-4]) j--;
}
str[j]='\0';
cout<<str<<endl;
}
}
|