LeetCode刷题记录(九):唯一摩尔斯密码词

135 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情

唯一摩尔斯密码词

题目如下图所示,也可以在LeetCode题目中找到此题。

image.png

题目解析

题目提供素材

  1. 提供了摩斯密码的定义密码表。

  2. 提供了一个参数:字符串数组words。

[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]

注:words数组中的元素,包含了一个只有小写字母的字符串。数组在1到100之间,其中的元素长度在1到12之间。

我的解读

这道题实在是简单了,没有花里胡哨的算法逻辑,有的就是获取值做对比,要说真正要理解的,就是Set集合的使用吧。

最后再对比所有结果,去重后的数量就是我们要的正确结果了。

解题思路

我最开始的解题思路是每次循环获取到每一个转换后的值,并且将其存储下来。

然后等到下一个转换出来后,跟之前转换好的值做一个对比即可。

不过有个更好的方法,我也是通过题解才想到。

果然还是要利用好基础知识。

Java通过Set集合来保存转换后的值,因为Set集合是不存在重复值的,直接也不用去再通过循环去判断了。

还有一个注意的点,那就是如何通过数组的下标拿到相应的摩尔斯密码。

这里用的是当前字母减去a字母,就可以获得当前字母在二十六个字母中的排序。

这样我们就可以通过简单的循环操作完成这道题了。

代码

class Solution {

    public static String[] mosi = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};

    public int uniqueMorseRepresentations(String[] words) {

        Set<String> result = new HashSet<>();

        for(String s : words){
            StringBuilder code = new StringBuilder();
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                code.append(mosi[c - 'a']);
            }
            result.add(code.toString());
        }

        return result.size();
    }

}

执行结果

大家一起刷题,确实还挺好。

image.png