zoukankan      html  css  js  c++  java
  • LeetCode --- 字符串系列 --- 唯一摩尔斯密码词

    唯一摩尔斯密码词

    本题涉及 Set 的使用
    附上 Set 的随笔
    集合 Set

    题目

    国际摩尔斯密码定义一种标准编码方式

    将每个字母对应于一个由一系列点和短线组成的字符串

    比如: "a" 对应 ".-", "b" 对应 "-...", "c" 对应 "-.-.", 等等。

    为了方便,所有26个英文字母对应摩尔斯密码表如下:

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

    给定一个单词列表,每个单词可以写成每个字母对应摩尔斯密码的组合。

    例如,"cab" 可以写成 "-.-..--...",(即 "-.-." + "-..." + ".-"字符串的结合)。

    我们将这样一个连接过程称作单词翻译。

    返回我们可以获得所有词不同单词翻译的数量。


    示例

    示例 1:
    
    例如:
    输入: words = ["gin", "zen", "gig", "msg"]
    输出: 2
    解释: 
    各单词翻译如下:
    "gin" -> "--...-."
    "zen" -> "--...-."
    "gig" -> "--...--."
    "msg" -> "--...--."
    
    共有 2 种不同翻译, "--...-." 和 "--...--.".
    

    来源:力扣(LeetCode)

    链接:https://leetcode-cn.com/problems/unique-morse-code-words

    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


    解题思路

    普通方式

    定义变量数组 res = []
    1、第一层循环遍历 `单词数组` 拿到 `单词元素 word`
    2、
    因为都是 `小写字母` , `小写字母` 第一位 a 的数值编号是 97;
    我们需要从 `摩斯数组` 中,取 a 以及其后的字母对应的摩斯码,就要使用字母的数值编号 - 97,得到摩斯数组中对应的下标
    3、第二层循环遍历拿到的 `单词元素 word`,根据上面的计算逻辑,进行字母的摩斯码替换;
    用一个变量 mosStr 拼接,得到该单词元素的 `摩斯码`
    4、第二层循环结束后,使用变量 `数组 res` 存储上面得到的单词元素 `摩斯码` mosStr
    5、将 mosStr 与 res 里面的元素进行对比,是否存在于 res 中,做去重处理
    6、最后,返回 res 的长度
    

    Set 集合去重

    定义集合 res = new Set()
    1、第一层循环遍历 `单词数组` 拿到 `单词元素 word`
    2、
    因为都是 `小写字母` , `小写字母` 第一位 a 的数值编号是 97;
    我们需要从 `摩斯数组` 中,取 a 以及其后的字母对应的摩斯码,就要使用字母的数值编号 - 97,得到摩斯数组中对应的下标
    3、第二层循环遍历拿到的 `单词元素 word`,根据上面的计算逻辑,进行字母的摩斯码替换;用一个变量 mosStr 拼接,得到该单词元素的 `摩斯码`
    4、第二层循环结束后,使用 `集合 res` 存储上面得到的单词元素 `摩斯码` mosStr
    5、因为集合唯一性的特性,确保每个元素都不重复,所以 res 的 size 就是最终的答案
    

    题解

    普通方式

    let uniqueMorseRepresentations = function(words) {
        let mos = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
        let res = []
        // 第一层循环遍历 `单词数组` 拿到 `单词元素 word`
        words.forEach(word => {
            let mosStr = ''
            for (let i = 0; i < word.length; i++) {
                // 因为都是 `小写字母` , `小写字母` 第一位 a 的数值编号是 97;
                // 我们需要从 `摩斯数组` 中,取 a 以及其后的字母对应的摩斯码
                // 就要使用字母的数值编号 - 97,得到摩斯数组中对应的下标
                let strNum = word[i].charCodeAt()
                // 变量 mosStr 拼接,得到该单词元素的 `摩斯码`
                mosStr += mos[strNum - 97]
            }
            let judge = true
            for (let n = 0; n < res.length; n++) {
                // 将 mosStr 与 res 里面的元素进行对比,是否存在于 res 中,做去重处理
                if (res[n] === mosStr) {
                    judge = false
                    break;
                }
            }
            if (judge) {
                // `数组 res` 存储上面得到的单词元素 `摩斯码` mosStr
                res.push(mosStr)
            }
        })
        return res.length
    };
    

    或者

    使用 Set 集合去重

    let uniqueMorseRepresentations = function(words) {
        let mos = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
        let res = new Set()
        // 第一层循环遍历 `单词数组` 拿到 `单词元素 word`
        words.forEach(word => {
            let mosStr = ''
            for (let i = 0; i < word.length; i++) {
                // 因为都是 `小写字母` , `小写字母` 第一位 a 的数值编号是 97;
                // 我们需要从 `摩斯数组` 中,取 a 以及其后的字母对应的摩斯码
                // 就要使用字母的数值编号 - 97,得到摩斯数组中对应的下标
                let strNum = word[i].charCodeAt()
                // 变量 mosStr 拼接,得到该单词元素的 `摩斯码`
                mosStr += mos[strNum - 97]
            }
            // 因为集合唯一性的特性,确保每个元素都不重复,所以 res 的 size 就是最终的答案
            res.add(mosStr)
        })
        return res.size
    };
    

    都读到最后了、留下个建议如何
  • 相关阅读:
    VS2019远程调试
    windows下使用redis-desktop-manager远程连接redis失败问题
    无法打开到SQL Server的连接 (Microsoft SQL Server, 错误:53) .
    由于管理员设置的策略,该磁盘处于脱机状态
    window下ping端口tcping
    dos命令远程登陆window server服务器并重启
    大二寒假作业之Android
    大二寒假作业之Android
    大二寒假作业之Android
    大二寒假作业之JavaWeb
  • 原文地址:https://www.cnblogs.com/linjunfu/p/12639613.html
Copyright © 2011-2022 走看看