使用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的特性来解决“唯一的摩尔斯密码词”问题的主要内容,如果未能解决你的问题,请参考以下文章

Collection Set&HashSet&TreeSet(HashMap实现,去重特性)

List列表使用HashSet实现数据去重小技巧

c#_HashSet

c#_HashSet

Java中常见数据结构Set之HashSet

纯数组去重