UVa11988悲劇文本、破損的鍵盤、鏈表

題目如下:

大體意思就是,用鍵盤敲字,碰到 “[” 符號就從第一位開始敲,如果碰到 “]” 符號就從最後一位開始敲。上面?題目裏有例子。

下面是我用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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章