因为要经常移动这些字符,所以采用的数据结构是链表。
next[i]起到的作用大概就是类似链表里的next指针。
0.需要注意的是,判断cur == last ? 如果 是 则 last=i
1.另外一点是,输入的时候把next[0]空出来,起链表里面空白头结点的作用。所以输入的时候有个小改动
从s+1开始填入字符,计算长度的时候也是从s+1开始计算,s代表的是这个数组的首地址。
2.直接往oj上交的时候要注意,next数组名要改一下
2.
1 while(~scanf("%s",s+1)) 2 { 3 int len=strlen(s+1); 4 ...... 5 }
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 using namespace std; 5 const int maxn= 100000 +5; 6 int next[maxn]; 7 char s[maxn]; 8 int main() 9 { 10 while(~scanf("%s",s+1)) 11 { 12 int len=strlen(s+1); 13 int last=0,cur=0; 14 next[0]=0; 15 for(int i=1;i<=len;i++) 16 { 17 if(s[i]==‘[‘) 18 { 19 cur=0; 20 } 21 else if(s[i]==‘]‘) 22 { 23 cur=last; 24 } 25 else 26 { 27 next[i]=next[cur]; 28 next[cur]=i; 29 if(cur==last) last=i;//*** 30 cur=i; 31 } 32 } 33 for(int i=next[0];i!=0;i=next[i]) 34 { 35 cout<<s[i]; 36 } 37 cout<<endl; 38 } 39 40 return 0; 41 }
时间: 2024-10-05 16:19:33