使用HashSet的特性来解决“唯一的摩尔斯密码词”问题
Posted &小小白&
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用HashSet的特性来解决“唯一的摩尔斯密码词”问题相关的知识,希望对你有一定的参考价值。
八、唯一的摩尔斯密码词
8.1、题设要求
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如:
‘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] 由小写英文字母组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-morse-code-words
8.2、解题思路
先定义一个摩尔斯密码字典,再将字符串数组中的每个单词取出来并依次进行循环,将每个单词中的每个字母进行转换再拼接,然后把拼接好的莫尔斯密码保存到HashSet中(这时我们使用了HashSet的唯一性,HashSet中只会将一个类型存储一次,故HashSet中的元素是不存在重复的),最后再将HashSet的大小返回即可。
8.3、算法
class Solution
public int uniqueMorseRepresentations(String[] words)
//先定义一个摩尔斯密码字典
String[] MORSE = ".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..";
Set<String> set = new HashSet<>();
//将字符串数组中的每个单词取出来并依次进行循环
for(String word : words)
//使用StringBuilder将转换的密码储存起来
StringBuilder sb = new StringBuilder();
//使用每个单词的长度进行循环
for(int i = 0;i < word.length();i++)
//将每个单词中的每个字母取出来
char c = word.charAt(i);
//将每个单词转换成摩尔斯密码并进行拼接
//MORSE[c - 'a']将每个单词进行转换
//code.append()将转换的单词进行拼接
sb.append(MORSE[c - 'a']);
//将转换后的结果存入到HashSet中,这里我们使用到了HashSet的唯一性
//因为HashSet中的值是唯一的,所以重复的类型会被去掉
set.add(sb.toString());
//最后,我们只需要返回HashSet的大小即可
return set.size();
以上是关于使用HashSet的特性来解决“唯一的摩尔斯密码词”问题的主要内容,如果未能解决你的问题,请参考以下文章