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]只包含小寫字母。

解答:

class Solution {
    public int uniqueMorseRepresentations(String[] words) {
        String[] codes={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
        //因為題目中要求不同單詞,所以要去掉重複元素,所以用集合來儲存
        TreeSet<String> set=new TreeSet<String>();
        
        //遍歷每一個單詞
        for(String word: words){
            
            StringBuilder sb=new StringBuilder();
            //遍歷每一個單詞的每一個字母
            for(int i=0;i<word.length();i++){
                
                //運用自動型別轉換,獲取該字母對應的福爾摩斯密碼
                int index=word.charAt(i)-'a';
                sb.append(codes[index]);
            }
            //得到一個完整單詞的福爾摩斯密碼,並放到集合中,自動去重。
            set.add(sb.toString());
            
        }
        //集合大小,即為所求。
        return set.size();
        
        
    }
}