问题:能正常输出empty,但是第二个样例会无限输出s
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
string str;
vector<int> alt , del;
const int N = 1000010;
int l[N] , r[N];
bool vis[N];
bool f[N];
void insert(int k){
if(!vis[k]){
vis[k] = true;
del.push_back(k);
}
}
int main(){
cin >> str;
int n = str.size();
str = ' ' + str;
for(int i = 1;i <= n;i++){
l[i] = i - 1 , r[i] = i + 1;
alt.push_back(i);
}
r[0] = 1 , l[n + 1] = n;
str[0] = str[n + 1] = '?';
for(;;){
for(int k : alt){
int a = l[k] , b = k , c = r[k];
if(a && str[a] != '?' && str[b] == str[a] && str[b] != str[c]){
insert(b);
insert(c);
}
if(c != n + 1 && str[c] != '?' && str[b] != str[a] && str[b] == str[c]){
insert(a);
insert(b);
}
}
if(del.empty()) break;
alt.clear();
for(int k : del){
int a = l[k] , b = k , c = r[k];
if(a && str[a] != '?' && !vis[a] && !f[a]){
alt.push_back(a);
f[a] = true;
}
if(c != n + 1 && str[c] != '?' && !vis[c] && !f[c]){
alt.push_back(c);
f[c] = true;
}
r[a] = c , l[c] = a;
}
del.clear();
for(int i = r[0];str[i] != '?';i = r[i]) cout << str[i];system("pause");
}
if(r[0] == n + 1) puts("EMPTY");
else for(int i = r[0];str[i] != '?';i = r[i]) cout << str[i];
return 0;
}