題目
國際摩爾斯密碼定義一種標準編碼方式,將每個字母對應於一個由一系列點和短線組成的字符串, 比如: “a” 對應 “.-“, “b” 對應 “-…”, “c” 對應 “-.-.”, 等等。
爲了方便,所有26個英文字母對應摩爾斯密碼錶如下:
[“.-“,”-…”,”-.-.”,”-..”,”.”,”..-.”,”–.”,”….”,”..”,”.—”,”-.-“,”.-..”,”–”,”-.”,”—”,”.–.”,”–.-“,”.-.”,”…”,”-“,”..-“,”…-“,”.–”,”-..-“,”-.–”,”–..”]
給定一個單詞列表,每個單詞可以寫成每個字母對應摩爾斯密碼的組合。例如,”cab” 可以寫成 “-.-.-….-“,(即 “-.-.” + “-…” + “.-“字符串的結合)。我們將這樣一個連接過程稱作單詞翻譯。
返回我們可以獲得所有詞不同單詞翻譯的數量。
例如:
輸入: words = [“gin”, “zen”, “gig”, “msg”]
輸出: 2
解釋:
各單詞翻譯如下:
“gin” -> “–…-.”
“zen” -> “–…-.”
“gig” -> “–…–.”
“msg” -> “–…–.”
共有 2 種不同翻譯, “–…-.” 和 “–…–.”.
注意:
單詞列表words 的長度不會超過 100。
每個單詞 words[i]的長度範圍爲 [1, 12]。
每個單詞 words[i]只包含小寫字母。
思考:java中char是可以轉換成int的,’a’=97,’z’=122,可以用char-97作爲摩斯編碼數組的下標。
public static void main(String[] args) {
String[] words={"gin", "zen", "gig", "msg"};
System.out.println(new Test().uniqueMorseRepresentations(words));
}
String[] mor={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
public int uniqueMorseRepresentations(String[] words) {
Set<String> set=new HashSet<>();
for(String word:words){
set.add(toMorStr(word));
}
return set.size();
}
// 轉換word爲摩斯編碼字符串
private String toMorStr(String word){
StringBuilder sb=new StringBuilder();
for(int i=0;i<word.length();i++){
sb.append(mor[word.charAt(i)-97]);
}
return sb.toString();
}