【刷题日记】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

好了,本次就到这里

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

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

相关文章
社区活动礼品兑换攻略
社区活动礼品兑换攻略
13934 1
|
关系型数据库 物联网 分布式数据库
带团队做数据库研发中印象深刻的故事
本文以游戏行业介绍PolarDB的发展。
190 0
|
5月前
|
Linux 开发工具 C语言
在CentOS系统中编译安装TinyXml2的方法
以上就是在CentOS系统中编译安装TinyXml2的方法。这个过程可能会有些复杂,但只要你按照上面的步骤一步一步来,你应该能够成功地完成这个任务。如果你在这个过程中遇到任何问题,你可以在网上搜索相关的资料,或者在相关的论坛上寻求帮助。希望这个指南能够帮助你成功地在你的CentOS系统中编译安装TinyXml2。
143 22
|
Web App开发 Python
Selenium Python 更改 chrome 默认下载目录
关于使用Selenium和Python无法更改Google Chrome默认下载目录的可能问题和解决方法,按照以上步骤,你应该能够成功使用Selenium和Python更改Google Chrome的默认下载目录。
574 0
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的新能源汽车信息咨询服务附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的新能源汽车信息咨询服务附带文章源码部署视频讲解等
130 1
|
安全 应用服务中间件 网络安全
遭遇DDOS攻击忍气吞声?立刻报警!首都网警重拳出击,犯罪分子无所遁形
公元2024年2月24日18时许,笔者的个人网站突然遭遇不明身份者的DDOS攻击,且攻击流量已超过阿里云DDos基础防护的黑洞阈值,服务器的所有公网访问已被屏蔽,由于之前早已通过Nginx屏蔽了所有国外IP,在咨询了阿里云客服之后,阿里网安的老同事帮助分析日志并进行了溯源,客服建议笔者选择立刻报警处理! 我国《刑法》二百八十六条规定,违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下三年以上有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。
遭遇DDOS攻击忍气吞声?立刻报警!首都网警重拳出击,犯罪分子无所遁形
|
JSON JavaScript 中间件
Node.js Express 框架
Node.js Express 框架
127 0
|
消息中间件 JavaScript 小程序
聊聊大厂都在用的 JavaAgent 上
聊聊大厂都在用的 JavaAgent 上
|
机器学习/深度学习 传感器 人工智能
AI:人工智能的多模态融合模型的简介、发展以及未来趋势
AI:人工智能的多模态融合模型的简介、发展以及未来趋势
AI:人工智能的多模态融合模型的简介、发展以及未来趋势
|
JSON JavaScript 前端开发