1. 程式人生 > >(java)leetcode804 唯一摩爾斯密碼詞(Unique Morse Code Words)

(java)leetcode804 唯一摩爾斯密碼詞(Unique Morse Code Words)

題目描述:

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

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

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

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

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

示例

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

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

注意:

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

解題思路:

每一個字母對應一個摩爾斯密碼,這就需要讀取字串中的每一個字元,轉換成摩爾斯密碼,並拼接成字串。然後將拼接成的字串儲存到set集合中,因為set不會儲存相同的物件,所以最後只用返回set的大小就可以知道一共有多少種翻譯了型別了。

首先需要建立一個map,用字母作為key,摩爾斯密碼作為value,來儲存每一個字母的摩爾斯密碼,後面遍歷字串時,就可以通過字母很快的查詢到對應的摩爾斯密碼了。 

程式碼實現(java):

class Solution {
    public int uniqueMorseRepresentations(String[] words) {
        String[] Codes={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
        Character[] Letters={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
        HashMap<Character,String> CodeMap=new HashMap<Character,String>();
        Set Type=new HashSet();
        
        for(int i=0;i<Codes.length;i++){
            CodeMap.put(Letters[i],Codes[i]);
        }
        
       
        for(int i=0;i<words.length;i++){
            char[] word=words[i].toCharArray();
            
            StringBuilder result=new StringBuilder();
            for(Character w:word){
                Character character = new Character(w);
                result.append(CodeMap.get(character));
            }
            Type.add(result.toString());
        }
        
        return Type.size();
    }
}

本人才疏學淺,若有錯誤和更好的方法,歡迎在評論中指出,共同進步。