知识点:链表
这个题应该是用链表的,如果数组模拟会移动大量的元素,我用的李煜东在进阶指南给的双向链表的模板,11分钟就过了,题目上两个键的意思是一个移动到开头,一个移动到末尾,
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
struct node {
char val;
int pre, nxt;
} a[N];
int tot, head, tail;
void init() {
tot = 2;
head = 1; tail = 2;
a[head].nxt = 2;
a[tail].pre = 1;
}
int insert(int p, char val) {
int q = ++tot;
a[q].val = val;
a[q].pre = p;
a[q].nxt = a[p].nxt;
a[p].nxt = q;
a[a[q].nxt].pre = q;
return q;
}
int main() {
string s;
while (cin >> s) {
init();
int p = head;
for (int i = 0; i < (int) s.size(); i++) {
if (s[i] == '[') p = head;
else if (s[i] == ']') p = a[tail].pre;
else p = insert(p, s[i]);
}
p = a[head].nxt;
while (p != tail) {
cout << a[p].val;
p = a[p].nxt;
}
cout << endl;
}
return 0;
}