TommyChok的博客

为自己写博客,为不遗忘而写博客,写的只是兴趣,道的只是随意!

UVa 11988 ------ Broken Keyboard

题目:UVa 11988


/*
	UVa 11988 ------ Broken Keyboard
*/
#include <cstdio>
#include <cstring>

const int maxn = 100000 + 5;
int cur, last, next[maxn];
char s[maxn];

int main()
{
	while (scanf("%s", s + 1) == 1){//从s[1]开始存取
		//初始化工作
		int len = strlen(s + 1);
		last = cur = 0;
		next[0] = 0;

		//将字符串利用next串起来,其中cur为当前光标的位置
		for (int i = 1; i <= len; ++i){
			char ch = s[i];	//获取当前字符
			if ('[' == ch)
				cur = 0; //cur标记当前光标位置,遇到[则标记为0
			else if (']' == ch)
				cur = last;	//cur标记当前位置,last标记最后一个字母的位置,遇到]则将cur设置为last
			else{
				//普通字母,则在cur之后,next[cur]之前插入i位置的字符(链表的插入)
				next[i] = next[cur];
				next[cur] = i;	//链表的插入
				if (cur == last)
					last = i;	//若在尾部插入则更新尾指针
				cur = i; //移动光标
			}
		}//for(i)
		for (int i = next[0]; i != 0; i = next[i]){
			printf("%c", s[i]);
		}//for(i)
		puts("");
	}//while(s)

	return 0;
}


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TommyChok/article/details/49948035
文章标签: UVa 11988
个人分类: UVa
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

UVa 11988 ------ Broken Keyboard

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭