例题6-4 破损的键盘(又名:悲剧文本)(Broken Keyboard(a.k.a. Beiju Text), UVa11988)

原题链接: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;
}
发布了104 篇原创文章 · 获赞 97 · 访问量 4515

猜你喜欢

转载自blog.csdn.net/TK_wang_/article/details/105340837