UVa 11988破損的鍵盤
這題是很好的學習用陣列實現連結串列的例子.
原題連結 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;
}
如有不當之處歡迎指出!!