把原字符串从'[',']'处分隔成小字符串,然后维护每个字符串右边的字符串标号,已经第一个字符串head,最后一个字符串tail。
读到一个'['表示把接下来的字符串放到最前面。']‘表示把下个字符串放到最后面,维护模拟指针即可。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#include <string>
string s[100005];
int head;
int tail;
int Right[100005];
int sz=0;
int main(){
char tmp[100005];
while(~scanf("%s",tmp)){
memset(Right,0,sizeof(Right));
int len=strlen(tmp);
sz=1;
s[sz]="";
head=1;
tail=1;
for(int i=0;i<len;i++){
if(tmp[i]!='['&&tmp[i]!=']'){
s[sz]+=tmp[i];
}
else{
sz++;
s[sz]="";
if(tmp[i]=='['){
Right[sz]=head;
head=sz;
}
else {
Right[tail]=sz;
tail=sz;
}
}
}
for(int i=head;i;i=Right[i]){
cout<<s[i];
}
cout<<endl;
}
return 0;
}