题目来源于力扣(LeetCode)
一、题目
题目相关标签:字符串
注意:
- 单词列表
words
的长度不会超过100
。- 每个单词
words[i]
的长度范围为[1, 12]
。- 每个单词
words[i]
只包含小写字母。
二、解题思路
-
遍历 words 单词列表,对于数组中的每个单词进行遍历
-
对字母字符在哈希数组中找到其对应的摩斯密码
-
将每次遍历得到的摩斯密码存储到缓冲字符串中
-
遍历完每一个单词,都将缓冲字符串添加到 set 集合中,通过 set 集合的特性来实现去重的效果
-
最终 set 集合的大小即是不同摩斯密码的个数
三、代码实现
public static int uniqueMorseRepresentations(String[] words) {
// 据题意:26个英文字母对应摩尔斯密码表如下
String[] trans = {".-", "-...", "-.-.", "-..", ".", "..-.",
"--.", "....", "..", ".---", "-.-", ".-..",
"--", "-.", "---", ".--.", "--.-", ".-.",
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."};
Set<String> set = new HashSet<>();
for (String word : words) {
StringBuilder sb = new StringBuilder();
// 遍历单词中的字符
for (int i = 0; i < word.length(); i++) {
int index = word.charAt(i) - 'a';
// 将字符对应的摩斯密码添加到字符串中
sb.append(trans[index]);
}
// 最终的字符串存储到 set 中,通过 set 集合实现去重效果
set.add(sb.toString());
}
// 最终 set 中的大小即不同的单词翻译
return set.size();
}
四、执行用时
五、部分测试用例
public static void main(String[] args) {
String[] words = {"gin", "zen", "gig", "msg"}; // output:2
int result = uniqueMorseRepresentations(words);
System.out.println(result);
}