LeetCode之804. 唯一摩爾斯密碼詞
阿新 • • 發佈:2019-01-03
運用的知識: 集合。 參考:自定義集合
題目描述:
國際摩爾斯密碼定義一種標準編碼方式,將每個字母對應於一個由一系列點和短線組成的字串, 比如: "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(); } }