每日一题
- 题目描述
- 解题核心
- 解法一:模拟
题目描述
题目链接:804.唯一摩尔斯密码词
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如:
'a'
对应".-"
'b'
对应"-..."
'c'
对应"-.-."
,以此类推。
为了方便,所有 26 个英文字母的摩尔斯密码表如下:
[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
给你一个字符串数组 words ,每个单词可以写成每个字母对应摩尔斯密码的组合。
- 例如,
"cab"
可以写成"-.-..--..."
,(即"-.-." + ".-" + "-..."
字符串的结合)。我们将这样一个连接过程称作 单词翻译 。 对words
中所有单词进行单词翻译,返回不同 单词翻译 的数量。
示例 1
输入: words = [“gin”, “zen”, “gig”, “msg”]
输出: 2
解释:
各单词翻译如下:
“gin” -> “–…-.”
“zen” -> “–…-.”
“gig” -> “–…–.”
“msg” -> “–…–.”
共有 2 种不同翻译, “–…-.” 和 “–…–.”.
示例 2
输入:words = [“a”]
输出:1
提示
- 1 <=
words.length
<= 100 - 1 <=
words[i].length
<= 12 words[i]
由小写英文字母组成
解题核心
注意不同的字母对应不同的解码,但是组成的结果可能相同,所以需要去重
解法一:模拟
直接将每个单词翻译,然后用集合去重
public int uniqueMorseRepresentations(String[] words) {String[] password = new String[] {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};HashSet<String> set = new HashSet<>();for (String word : words) {StringBuilder temp = new StringBuilder();for (int j = 0; j < word.length(); j++) {int index = (word.charAt(j) - '0') - 49;temp.append(password[index]);}set.add(temp.toString());}return set.size();
}