【LeetCode】唯一摩尔斯密码词Java题解

162 阅读2分钟

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

题目描述

国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如:

'a' 对应 ".-" , 'b' 对应 "-..." , 'c' 对应 "-.-." ,以此类推。 为了方便,所有 26 个英文字母的摩尔斯密码表如下:

[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."] 给你一个字符串数组 words ,每个单词可以写成每个字母对应摩尔斯密码的组合。

例如,"cab" 可以写成 "-.-..--..." ,(即 "-.-." + ".-" + "-..." 字符串的结合)。我们将这样一个连接过程称作 单词翻译 。 对 words 中所有单词进行单词翻译,返回不同 单词翻译 的数量。

 

示例 1:

输入: words = ["gin", "zen", "gig", "msg"]
输出: 2
解释: 
各单词翻译如下:
"gin" -> "--...-."
"zen" -> "--...-."
"gig" -> "--...--."
"msg" -> "--...--."

共有 2 种不同翻译, "--...-.""--...--.".
示例 2:

输入:words = ["a"]
输出:1

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-morse-code-words
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路分析

  • 今天的算法题目是字符串处理题目,摩尔斯电码也被称作摩斯密码,是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。
  • 根据题目给出的信息,我们可以快速枚举出每个字母对应的字符串转换。
  • 题目要求的答案是不同单词翻译的数量,因此我们采用 hashset 数据结构来保存 不同单词翻译 的唯一性, 最终 hashset 的长度就是答案。具体实现代码如下:

通过代码

 class Solution {
    public int uniqueMorseRepresentations(String[] words) {
        String[] arr = new String[]{".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};

        Set<String> set = new HashSet<>();
        for (String word : words) {
            StringBuilder temp = new StringBuilder();
            for (char ch : word.toCharArray()) {
                temp.append(arr[ch - 'a']);
            }
            set.add(temp.toString());
        }

        return set.size();
    }
}

image.png

总结

  • 上述算法的时间复杂度是O(n * n),空间复杂度是O(n)
  • 坚持算法每日一题,加油!