简单题,题目要求显然是很多次插入,所以是链表。
插入两个语句,nxt[i] = nxt[u] 表示 i结点指向u的后继, nxt[u] = i表示把u的后继设成i。
设置一个头结点,指向一个不存在的结点,维护一下最后一个结点tail。
#includeusing namespace std;const int maxn = 1e5+5;int nxt[maxn];char s[maxn];int main(){ //freopen("in.txt","r",stdin); while(gets(s+1)){ int head = 0, cur = 0, tail = 0; nxt[0] = -1; for(int i = 1; s[i]; i++){ if(s[i] == '[') cur = head; else if(s[i] == ']') cur = tail; else { nxt[i] = nxt[cur]; nxt[cur] = i; if(cur == tail) tail = i; cur = i; } } for(int i = nxt[head]; ~i; i = nxt[i] ){ putchar(s[i]); } putchar('\n'); } return 0;}