題目連結:
題目大意:
輸入給定一個字串(最長不超過 300 個字元,字元只會有數字、英文字母以及 '+' 和 '-',且必定包含一個非 '+' 或 '-' 之字元),代表一個密文。請將該密文解密後輸出。
解密方式為:一開始字串由左往右讀,直到遇到 '+' 或是 '-'。當遇到 '-' 的時候,代表到下一個 '+' 或是 '-' (或是字串結尾)之間的字串內容為由右往左讀;如果是 '+' ,則代表接著應由左往右讀。
範例輸入:
範例輸入 #1
1234+5678
範例輸入 #2
1234-5678
範例輸入 #3
I-evol+you
範例輸入 #4
you+-aw+-tn+-nac+-yd
範例輸入 #5
ptt
範例輸出:
範例輸出 #1
12345678
範例輸出 #2
12348765
範例輸出 #3
Iloveyou
範例輸出 #4
youwantcandy
範例輸出 #5
ptt
解題思維:
用一個變數 L 記錄每個字串內容區間的開頭(一開始為 0)、以及另一個變數 D 用來表示接下來的區間應為由左往右還是由右往左。
接著就是掃過給定字串。當碰到 '+' 或是 '-' 時(假設此時是第 X 個字元),就根據 D 正序或是反序地輸出字串第 L 個字元 ~ 第 X - 1 個字元(代表被字串開頭或是兩個 '+' 或是 '-' 夾著之間的字串內容)。然後根據是 '+' 或是 '-' 去設定 D 之值,並將 L 設為 X + 1。
最後,因為很有可能會忽略掉字串最後一段的內容(例如 "123-456" 的 "456"),所以我們需要再另外輸出該段內容(同樣記得要根據 D 之值決定順序)。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。