1. 程式人生 > >leetcode.804 唯一摩爾斯密碼詞

leetcode.804 唯一摩爾斯密碼詞

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

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

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

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

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

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

共有 2 種不同翻譯, "--...-." 和 "--...--.".

 

注意:

  • 單詞列表words 的長度不會超過 100
  • 每個單詞 words[i]的長度範圍為 [1, 12]
  • 每個單詞 words[i]只包含小寫字母。

思路一:用字元陣列 a 儲存莫爾斯密碼,先遍歷 words 字元陣列的每一個字串,然後用得到的字串的每一個字元減去 'a',得到整數,利用此整數在陣列 a 中得到相應的莫爾斯密碼,最後利用 set 的不重複特性加入此莫爾斯密碼,最後返回 set 的 size 即可。

程式碼:

class Solution {
    public int uniqueMorseRepresentations(String[] words) {
        String[] a = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
        
        Set<String> set = new HashSet<>();
       
            for(int i = 0;i < words.length; i++){
                 String b = "";
                for(int j = 0;j < words[i].length(); j++){
                    int c = words[i].charAt(j) - 'a';
                    b += a[c];
                }
                set.add(b);
            }
        return set.size();
    }
}