【刷题日记】804. 唯一摩尔斯密码词

简介: 本次刷题日记的第 29 篇,力扣题为:804. 唯一摩尔斯密码词 ,简单

【刷题日记】804. 唯一摩尔斯密码词

本次刷题日记的第 29 篇,力扣题为:804. 唯一摩尔斯密码词简单

一、题目描述:

image.png

今天周日,咱们也要保持习惯,leetcode 的今天每日一题是 一摩尔斯密码词,乍一看我们是不是也可以解密摩尔斯密码了?感觉有点意思


周日,leetcode 也想让咱放松一下,刷一个比较还理解的题目,一起来看看

二、这道题考察了什么思想?你的思路是什么?

这道题,给出了哪些重要点的信息呢:

  • 给出了从字母 a 到 字母 z 对应的字符串映射关系,这个映射关系我们不用刻意关注,哪怕变成其他的映射关系也无所谓,重点是我们只是他们是一一映射的就可以了
  • 题目要求,给出单词,我们要转换成对应的字符串,且在给出的单词数组中,不同的单词,可能存在相同的拼接结果字符串,那么,我们需要计算出,这些结果字符串中,不同种类的字符串翻译

看到上述给出的重点信息,对应让我们从字母或者单词,按照映射关系翻译成对应的字符串,这个没有啥好说的

直接写一个帮助列表,a-z 的字母,正好对应0-25 的列表索引,根据索引找到对应字符串,最后拼接起来即可

例如这样

image.png

那么我们可以很轻易的的拼接成字符串了,如何找到出不同的字符串呢

我们可以使用 hash 表来进行解决,hash 表的话,我们直接就可以使用 golang 中的 map 可以处理, c++ 中的 set 也可以处理,只要 key 是不会重复的就可以处理了

image.png

按照上述的思路,我们就可以很明确的得到这题的解决方式了,接下来,咱们就将上述思路,翻译成代码即可,思路还是很清晰的吧

三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码,编码的时候,这里需要注意

  • 需要创建好一个帮助列表,存放,每一个字母对应的字符串
  • 使用 hash 表来处理和提取结果字符串的种类

编码如下:

func uniqueMorseRepresentations(words []string) int {
    // 先写一个帮助列表
    var helper = []string{
        ".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
        "....", "..", ".---", "-.-", ".-..", "--", "-.",
        "---", ".--.", "--.-", ".-.", "...", "-", "..-",
        "...-", ".--", "-..-", "-.--", "--..",
    }
    m := map[string]int{}
    // 遍历单词
    for _,word := range words {
        // 开始处理每一个单词
        tmp := ""
        for _,ch := range word {
            tmp += helper[ch - 'a']
        }
        m[tmp]++
    }
    return len(m)
}

看完上述编码,还是很简单明了的,但是写过 golang 的兄弟,知道咱们直接拼接字符串效率是比较低, 我们可以使用 golang 自带的库, strings ,将上述关键代码替换成这样

css

复制代码

tmp := &strings.Builder{}tmp.WriteString(helper[ch-'a'])m[trans.String()]++

使用 strings.Builder 和 直接使用拼接字符串相比  strings.Builder 效率会高很多,具体原因是为什么,xdm 可以思考一下

四、总结:

此处,我们可以看到本题的时间复杂度是 O(S) ,此处的 S 可不是 单词的数量,而是每个单词的字符长度和,仔细看上述编码,咱们其实遍历的是每个单词的字符

此处的空间复杂度也是 O(S) ,我们创建的 tmp 字符串,开辟的空间也是如此

原题地址:804. 唯一摩尔斯密码词

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关文章
|
2月前
|
人工智能 搜索推荐 C++
小唐开始刷蓝桥(一)2020年第十一届C/C++ B组第二场蓝桥杯省赛真题
小唐开始刷蓝桥(一)2020年第十一届C/C++ B组第二场蓝桥杯省赛真题
|
12月前
|
C语言
【蓝桥杯刷题】盗版Huybery系列之手抓饼赛马
【蓝桥杯刷题】盗版Huybery系列之手抓饼赛马
87 0
|
数据安全/隐私保护
804 唯一摩尔斯密码词 leetcode
804 唯一摩尔斯密码词 leetcode
69 0
|
机器学习/深度学习 算法 测试技术
面试官在“逗”你系列:到底应该怎么爬楼梯?! | 牛气冲天新年征文
算法题是在面试过程中考察候选人逻辑思维能力、手写代码能力的一种方式,因为有一句古话说的好:“说一千道一万,不如写段代码看一看”。今天我们就来个单刀直入,直奔主题,从一个真实面试题到底怎么爬楼梯来聊一聊算法中的动态规划 。
178 0
|
算法 Java C#
【算法千题案例】每日LeetCode打卡——95.唯一摩尔斯密码词
📢前言 🌲原题样例:唯一摩尔斯密码词 🌻C#方法:暴力法 🌻Java 方法:哈希集合 💬总结
|
算法 搜索推荐
【技术小火车】万万没想到!原来你是这样的算法君?!
据说算法正在统治世界?吓得我瓜子都掉了......
5781 0
|
数据安全/隐私保护
「唯一摩尔斯密码词」| leetcode 刷题011
题目 国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: "a" 对应 ".-", "b" 对应 "-...", "c" 对应 "-.-.", 等等。
937 0
|
Oracle 关系型数据库 数据库管理