前往
大廳
主題

ZeroJudge - g005: 倒置文章 (Inversion) 解題心得

Not In My Back Yard | 2021-06-24 00:00:01 | 巴幣 0 | 人氣 278

題目連結:


題目大意:
輸入給定一個字串(最長不超過 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 之值決定順序)。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作