LeetCode每日一題:唯一摩爾斯密碼詞(No.804)

胖宅老鼠發表於2019-06-04

題目:唯一摩爾斯密碼詞


國際摩爾斯密碼定義一種標準編碼方式,將每個字母對應於一個由一系列點和短線組成的字串,
比如: "a" 對應 ".-", "b" 對應 "-...", "c" 對應 "-.-.", 等等。

為了方便,所有26個英文字母對應摩爾斯密碼錶如下:

[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---"
,".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]

給定一個單詞列表,每個單詞可以寫成每個字母對應摩爾斯密碼的組合。
例如,"cab" 可以寫成 "-.-..--...",(即 "-.-." + "-..." + ".-"字串的結合)。我們將這樣一個連線過程稱作單詞翻譯。

返回我們可以獲得所有詞不同單詞翻譯的數量。
複製程式碼

示例:


輸入: words = ["gin", "zen", "gig", "msg"]
輸出: 2
解釋: 
各單詞翻譯如下:
"gin" -> "--...-."
"zen" -> "--...-."
"gig" -> "--...--."
"msg" -> "--...--."

共有 2 種不同翻譯, "--...-." 和 "--...--.".
複製程式碼

思考:


遍歷字串單詞列表,用一個set去重存放最後摩爾斯密碼結果。
遍歷每個單詞,將每個字元轉換成對應摩爾斯密碼,最終將每個單詞摩爾斯密碼形式放入set集合中。
最後返回集合size即可。
複製程式碼

實現:


class Solution {
private static String[] map = {
   ".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."
    };
public int uniqueMorseRepresentations(String[] words) {
    if (words == null) return 0;
    HashSet<String> set = new HashSet<String>();
    for (String s : words) {
        StringBuilder sb = new StringBuilder();
        for (char c : s.toCharArray()) {
            sb.append(map[c - 'a']);
        }
        set.add(sb.toString());
    }
    return set.size();
}
複製程式碼

}

相關文章