您的位置:首页 > 其它

UVa 11988 ------ Broken Keyboard

2015-11-20 16:02 323 查看
题目: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  UVa 11988