題目如下:
大體意思就是,用鍵盤敲字,碰到 “[” 符號就從第一位開始敲,如果碰到 “]” 符號就從最後一位開始敲。上面?題目裏有例子。
下面是我用c語言實現的代碼(靜態數組):
#include <stdio.h>
#define maxn 100000+10
int cur,last;//cur表示當前從哪一個位置開始敲,last表示最後一位所在的位置
int next[maxn];//每個字的下一位在什麼地方
char text[maxn];//存儲輸入的字符串
int main(){
while(scanf("%s",text+1) == 1){//把0空出來,做頭
cur = last = next[0] = 0;//初始化變量
int i;
for(i = 1;text[i];i++){
if(text[i] == '[') cur = 0;//碰到 [ 就跳到前面
else if(text[i] == ']') cur = last;//碰到 ] 就跳到後面
else{
next[i] = next[cur];//相當於鏈表插入元素
next[cur] = i;
if(cur == last) last = i;//更新最後一位
cur = i;//更新當前位
}
}
for(i = next[0]; i ;i = next[i])//從第一位開始遍歷
printf("%c",text[i]);
printf("\n");
}
return 0;
}