您的位置:首页 > 其它

UVa 11988破损的键盘

2016-07-22 12:13 225 查看
这题是很好的学习用数组实现链表的例子.

原题链接 UVa11988

题意

输入一段文本,字符’[‘表示Home键,’]’表示End键。输出屏幕上面的结果。

思路

难点在于在字符串的头和尾插入字符,如果直接利用数组操作,会超时,最好的办法就是利用单向链表。

刘汝佳大哥的代码

#include<cstdio>
#include<cstring>
const int maxn=100000+5;
char str[maxn];
int next[maxn];
int cur,last;
int main(void)
{
while(scanf("%s",str+1)!=EOF)
{
int n=strlen(str+1);
cur=last=0;//
next[0]=0;

for(int i=1;i<=n;i++)
{
if(str[i]=='[') cur=0;
else if(str[i]==']') cur=last;
else
{
next[i]=next[cur];//记录之前坐标
next[cur]=i;//记录当前字符的下标
if(cur==last) last=i;
cur=i;
}
}
for(int i=next[0];i!=0;i=next[i])
{
printf("%c",str[i]);
}
printf("\n");
}
return 0;
}


如有不当之处欢迎指出!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: