对于数组来说移动元素是低效的 采用链表实现更为高效
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <stack>
using namespace std;
const int MAX = 100010;
int last, cur, next[MAX];
char s[MAX];
int main(){
while(scanf("%s",s + 1) == 1){
int l = strlen(s + 1);
last = cur = 0;
next[0] = 0;
for(int i=1; i<=l; i++){
char c = s[i];
if(c == '[') cur = 0;
else if(c == ']') cur = last;
else{
next[i] = next[cur];
next[cur] = i;
if(cur == last) last = i;
cur = i;
}
}
for(int i=next[0]; i!=0; i=next[i]){
printf("%c",s[i]);
}
printf("\n");
}
return 0;
}