链表

 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  } 

 

posted on 2016-03-21 01:17  babyyang  阅读(127)  评论(0编辑  收藏  举报