链表
1 /*你有一个破损的键盘 可能会自动按下“【”Home键 光标移到最左端 或是“】”键End 光标移到最右端 2 现在输出显示出的文本 3 输入:This_is_a_[beiju]_text 4 5 输出 :beijuThis_is_a__text 6 */ 7 #include<cstdio> 8 #include<iostream> 9 #include<cstring> 10 #include<ctime> 11 const int maxn=100000+5; 12 int last,cur,next[maxn];//、 13 char s[maxn]; 14 15 int main() 16 { 17 while(scanf("%s",s+1)==1)//输入多组数据 每组数据一行 18 { 19 int n=strlen(s+1); 20 last=cur=0; 21 next[0]=0; 22 for(int i=1;i<=n;i++) 23 { 24 char ch=s[i]; 25 if(ch=='[') cur=0;//字符串前还有一个虚拟的s[0] next[0]表示最左边的字符 26 else if(ch==']') cur=last; 27 else 28 { 29 next[i]=next[cur];//把i插在cur和next[cur]之间 30 next[cur]=i; 31 if(cur==last) last=i;//更新最后一个字符的编号 32 cur=i;//移动光标 33 } 34 } 35 for(int i=next[0];i!=0;i=next[i]) 36 { 37 printf("%c",s[i]); 38 } 39 printf("\n"); 40 printf("Time used =%.2f\n",(double)clock()/CLOCKS_PER_SEC); 41 return 0; 42 } 43 }