題目連結:
題目意譯:
你被給定兩個字串 key 以及 message,其依序代表著一個加密密鑰以及一個秘密訊息。解密訊息的步驟為以下:
將全部 26 個英文字母在 key 中的第一次出現位置,這些位置將依序作為替換字母表的排列順序、
將替換字母表與一般的字母表對齊、
message 中每個字母接著從上列列表來替換成別的字母、
空白 ' ' 將替換成自身。
例如,給定 key = "happy boy"(實際上的 key 將會有每一種字母都出現於其中),我們有著部分的替換列表('h' → 'a' 、 'a' → 'b' 、 'p' → 'c' 、 'y' → 'd' 、 'b' → 'e' 、 'o' → 'f')。
回傳解密後的訊息。
限制:
26 ≦ key.length ≦ 2000
key 由小寫英文字母以及 ' ' 組成。
key 包含字母表中每一個字母('a' 到 'z')至少一次。
1 ≦ message.length ≦ 2000
message 由小寫英文字母以及 ' ' 組成。
範例測資:
範例 1:
輸入: key = "the quick brown fox jumps over the lazy dog", message = "vkbs bs t suepuv"
輸出: "this is a secret"
解釋: 上圖顯示了替換字母表。
其由每個字母在 "the quick brown fox jumps over the lazy dog" 中的第一次出現的位置所形成。
範例 2:
輸入: key = "eljuxhpwnyrdgtqkviszcfmabo", message = "zwx hnfx lqantp mnoeius ycgk vcnjrdb"
輸出: "the five boxing wizards jump quickly"
解釋: 上圖顯示了替換字母表。
其由每個字母在 "eljuxhpwnyrdgtqkviszcfmabo" 中的第一次出現的位置所形成。
解題思維:
就是單純地模擬(即照著題目做)即可。
掃過一次 key,然後把目前沒有出現過的字母種類放到替換字母表中(因為先出現的字母,應排到替換表中的前面)。
然後根據替換字母表把 message 替換每一個字母即可。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。