(java)leetcode804 唯一摩爾斯密碼詞(Unique Morse Code Words)
阿新 • • 發佈:2018-11-01
題目描述:
國際摩爾斯密碼定義一種標準編碼方式,將每個字母對應於一個由一系列點和短線組成的字串, 比如: "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();
}
}
本人才疏學淺,若有錯誤和更好的方法,歡迎在評論中指出,共同進步。