原题链接:https://vjudge.net/problem/UVA-11988
分类:链表
备注:链表的数组实现
刘老师写的真是好多了…
代码如下:
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 1e5 + 5;
int next[maxn];
char s[maxn];
int main(void) {
while (~scanf("%s", s)) {
int head, tail;
int len = strlen(s), flag = 0, begin = 0;
while (s[begin] == '[' || s[begin] == ']')begin++;
head = tail = begin; next[begin] = -1;
for (int i = begin + 1; i < len; i++) {
if (s[i] == '[') { flag = 1; continue; }
if (s[i] == ']') { flag = 2; continue; }
if (!flag && i) {
next[i] = next[i - 1];
next[i - 1] = i;
if (tail == i - 1)
tail = i;
}
else if (flag == 1) {
next[i] = head;
head = i;
}
else if (flag == 2) {
next[tail] = i;
next[i] = -1;
tail = i;
}
flag = 0;
}
for (int i = head; i != -1; i = next[i])
printf("%c", s[i]);
printf("\n");
}
return 0;
}