题目:Broken Keyboard (a.k.a. Beiju Text)
题意:输入一段字符串,如果出现“[”光标会跳到首部输入,出现“]”光标会跳到尾部输入!输出最终的文本!
思路:利用链表。数组表示:next[i] = next[cur]指向下一结点,next[i] = i 更新当前结点
参考:入门经典-例6-4-P143
代码:
#include <iostream>
#include <string.h>
#include <cstdio>
#define MAXN 100005
using namespace std;
int nextt[MAXN];
char str[MAXN];
int main()
{
while(scanf("%s",str+1)!=EOF)
{
int last = 0;
int cur = 0;
nextt[0] = 0;
for(int i=1;str[i]!='\0';i++)
{
if(str[i] == '[')
cur = 0;
else if(str[i] == ']')
cur = last;
else
{
nextt[i] = nextt[cur];//下一结点指向当前结点
nextt[cur] = i;//更新当前结点
if(cur == last)
last = i;//更新最后字符的位置
cur = i;//移动光标位置
}
}
for(int i=nextt[0];i != 0;i = nextt[i])
{
printf("%c",str[i]);
}
printf("\n");
}
return 0;
}