uva 11988 Broken Keyboard (a.k.a. Beiju Text) 模拟链表

来源:互联网 发布:知豆电动汽车租赁价格 编辑:程序博客网 时间:2024/05/17 01:29

题意

在一个没有显示器的电脑上输入一个字符串,键盘坏掉了,会随机的出现home,和end按键,

字符串中'['代表home键(句首),']'代表end键(句尾),问最后输出的字符串的格式。

题解

用一个数组nxt[]来保存每个字符接下来的编号,假设字符串s前还有一个虚拟的s[0],则字符串的最左边就可以表示为nxt[0],注意不要使用next来作为数组的名字,否则会编译错误。

#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <cmath>#include <set>#include <map>using namespace std;const int maxn=100005;char s[maxn];int nxt[maxn];int main(){    while(scanf("%s",s+1)==1)    {        memset(nxt,0,sizeof(nxt));        int last,cur;        last=cur=0;//last记录字符串的尾部        int n=strlen(s+1);        for(int i=1;i<=n;i++)        {            if(s[i]=='[') cur=0;            else if(s[i]==']') cur=last;//光标移动到末尾            else            {                nxt[i]=nxt[cur];//新插入的字符的下一个节点是当前节点的下一个                nxt[cur]=i;//当前节点的下一个就是新插入的字符                if(cur==last)                    last=i;                cur=i;//更新光标            }        }        for(int i=nxt[0];i!=0;i=nxt[i])        {            printf("%c",s[i]);        }        printf("\n");    }    return 0;}



0 0
原创粉丝点击