【算法千题案例】每日LeetCode打卡——95.唯一摩尔斯密码词

article/2025/8/20 4:51:50

        • 📢前言
    • 🌲原题样例:唯一摩尔斯密码词
      • 🌻C#方法:暴力法
      • 🌻Java 方法:哈希集合
    • 💬总结

请添加图片描述


📢前言

🚀 算法题 🚀
  • 🌲 每天打卡一道算法题,既是一个学习过程,又是一个分享的过程😜
  • 🌲 提示:本专栏解题 编程语言一律使用 C# 和 Java 两种进行解题
  • 🌲 要保持一个每天都在学习的状态,让我们一起努力成为算法大神吧🧐!
  • 🌲 今天是力扣算法题持续打卡第95天🎈!
🚀 算法题 🚀

🌲原题样例:唯一摩尔斯密码词

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

  • ‘a’ 对应 “.-” ,
  • ‘b’ 对应 “-…” ,
  • ‘c’ 对应 “-.-.” ,以此类推。

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

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

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

  • 例如,“cab” 可以写成 “-.-…–…” ,(即 “-.-.” + “.-” + “-…” 字符串的结合)。我们将这样一个连接过程称作 单词翻译 。

对 words 中所有单词进行单词翻译,返回不同 单词翻译 的数量。

示例1:

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

示例2:

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

提示:

  • 1 <= words.length <= 100
  • 1 <= words[i].length <= 12
  • words[i] 由小写英文字母组成

🌻C#方法:暴力法

直接把所有字母所对应的摩尔斯密码写到字典里,然后单词就可以翻译成对应的摩尔斯密码了。

唯一难点就在有没有耐心能把26个字母和26个密码一一对应地输到字典里。

代码:

public class Solution
{public int UniqueMorseRepresentations(string[] words){Dictionary<char, string> Dic = new Dictionary<char, string>(){{'a',".-"},{'b',"-..."},{'c',"-.-."},{'d',"-.."},{'e',"."},{'f',"..-."},{'g',"--."},{'h',"...."},{'i',".."},{'j',".---"},{'k',"-.-"},{'l',".-.."},{'m',"--"},{'n',"-."},{'o',"---"},{'p',".--."},{'q',"--.-"},{'r',".-."},{'s',"..."},{'t',"-"},{'u',"..-"},{'v',"...-"},{'w',".--"},{'x',"-..-"},{'y',"-.--"},{'z',"--.."}};//一个一个将26个字母所对应的摩斯密码输进去,key为字母,value为对应的密码。StringBuilder SB = new StringBuilder();//新建一个StringBuilder,经常改字符串用这个快一点,因为后面每个字母都要改字符串,所以这里用这个。Dictionary<String, int> Dic2 = new Dictionary<string, int>();//这个字典用来储存不相同的摩斯密码。foreach(string i in words)//遍历words里的所有单词。{for(int j = 0; j < i.Length; j++)//遍历单词的字母{//将每个字母所对应的摩斯密码连起来。SB.Append(Dic[  i[j]/* i[j]为字母,Dic[i[j]]代表这个字母在字典中的Value*/  ]  );}//↓遍历完一个单词后,如果Dic2中没有储存这条摩斯密码,则将其加入进去,value设置为1(这个随便,只要保证能知道这密码存在就行了)。if (!Dic2.ContainsKey(SB.ToString())){Dic2.Add(SB.ToString(),1);}SB.Clear();//最后,将StringBuilder清空,因为遍历到下一串单词还用用上它。}return Dic2.Count;//最后只要返回Dic2的数量就行了,因为只加不重复的密码进去,所以它的数量就代表了不重复的密码。}
}
这里要感谢原文链接作者~
链接:https://leetcode-cn.com/problems/unique-morse-code-words/solution/bao-li-cha-zi-dian-cha-jiu-wan-shi-liao-by-huang-g/

执行结果

通过
执行用时:88 ms,在所有 C# 提交中击败了25.50%的用户
内存消耗:35.4 MB,在所有 C# 提交中击败了29.90%的用户

🌻Java 方法:哈希集合

思路解析
我们将数组 word 中的每个单词转换为摩尔斯码

并加入哈希集合(HashSet)中,最终的答案即为哈希集合中元素的个数。

代码:

class Solution {public int uniqueMorseRepresentations(String[] words) {String[] MORSE = new String[]{".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};Set<String> seen = new HashSet();for (String word: words) {StringBuilder code = new StringBuilder();for (char c: word.toCharArray())code.append(MORSE[c - 'a']);seen.add(code.toString());}return seen.size();}
}

执行结果

通过
执行用时:1 ms,在所有 Java  提交中击败了100.00%的用户
内存消耗:36.4 MB,在所有 Java 提交中击败了40.00%的用户

复杂度分析

时间复杂度:O( n )
空间复杂度:O(1) 

💬总结

  • 今天是力扣算法题打卡的第九十五天!
  • 文章采用 C#Java 两种编程语言进行解题
  • 一些方法也是参考力扣大神写的,也是边学习边分享,再次感谢算法大佬们
  • 那今天的算法题分享到此结束啦,明天再见!
    请添加图片描述

http://chatgpt.dhexx.cn/article/jveCorTK.shtml

相关文章

摩斯密码基础知识介绍

我嗯我可能闲的&#xff0c;就来看看摩斯密码这个著名的无线电编码是怎么回事~ 参考&#xff1a;百度百科https://baike.baidu.com/item/%E6%91%A9%E5%B0%94%E6%96%AF%E7%94%B5%E7%A0%81/1527853?fromtitle%E6%91%A9%E6%96%AF%E5%AF%86%E7%A0%81&fromid397016&fralad…

漫画:什么是摩尔斯电码?

摩尔斯电码是什么 摩尔斯电码&#xff08;Morse code&#xff09;&#xff0c;是1837年由美国人发明&#xff0c;本质上是一种对信息的编码&#xff0c;最初用于人们的远程通信。 那个时候&#xff0c;人们连电话都还没发明出来&#xff0c;更不用说手机和互联网了。人们远程通…

实验四:激光传感器实验,摩尔斯密码

注意&#xff1a;不要直视激光头&#xff0c;它会对你的眼睛造成很大的伤害。 注意&#xff1a;不要直视激光头&#xff0c;它会对你的眼睛造成很大的伤害。 注意&#xff1a;不要直视激光头&#xff0c;它会对你的眼睛造成很大的伤害。 OK&#xff0c;今天来讲一个稍微复杂…

摩斯密码加解密

摩斯密码又叫莫尔斯电码&#xff0c;摩斯电码 著名的SOS救难信号用莫尔斯电码表示为&#xff1a;...---...滴滴滴嗒嗒嗒滴滴滴 一、间隔时间 滴&#xff0c;1t&#xff0c;用.表示嗒&#xff0c;3t&#xff0c;用-表示滴嗒间&#xff0c;1t&#xff0c;不用表示字符间&#xff…

A : 摩斯密码

题目描述&#xff1a; 摩尔斯电码&#xff08;又译为摩斯密码&#xff0c;Morse code&#xff09;是一种时通时断的信号代码&#xff0c;通过不同的排列顺序来表达不同的英文字母、数字和标点符号。为了简单问题&#xff0c;去除所有的标点符号。 现在给你一段摩斯密码&#xf…

摩斯密码

摩斯密码&#xff0c;很多人肯定都听说过它的大名。但是多数人不了解它&#xff0c;认为这是个神一样的领域&#xff0c;难以企及。 但是我要告诉你&#xff0c;你如果想用这个密码日常聊天有些难&#xff0c;但是学两手来秀两手还是可以的。 比如说电影中经常出现的一个摩斯…

摩斯电码/密码入门简介

摩尔斯&#xff1a;是我们生活中非常常见的一种密码形式&#xff0c;例如电报就用的是这个哦 什么是摩尔斯电码&#xff1a; 摩斯电码是一种用于交流的系统&#xff0c;由塞缪尔•莫尔斯发明&#xff0c;它依靠一系列的点和划来传递编码信息。虽然&#xff0c;最初它被设计为…

摩尔斯电码(摩斯电码)

摩尔斯电码 简介电码对照表应用互译工具特殊符号常见缩写交流示例中文与摩斯电码 简介 摩尔斯电码&#xff08;又译为摩斯密码&#xff0c;Morse code&#xff09;是一种时通时断的信号代码&#xff0c;通过不同的排列顺序来表达不同的英文字母、数字和标点符号。它发明于1837…

没错,我是高端吃瓜玩家(搞懂摩斯密码)

前言 大家好&#xff0c;我是bigsai大赛哥&#xff0c;好久不见&#xff0c;甚是想念。 行了&#xff0c;咱们步入正轨&#xff0c;已经进入2022&#xff0c;在2021这一年&#xff0c;很多人的快乐消遣是在吃瓜快乐中度过的&#xff0c;有的作为主动吃瓜群众第一手掌握消息&…

摩斯密码是什么?

摩斯密码是什么&#xff1f; 摩斯密码&#xff08;摩尔斯电码&#xff09;是一种时通时断的信号代码&#xff0c;通过不同的排列顺序来表达不同的英文字母、数字和标点符号&#xff1b;它的代码包括五种&#xff1a; 点、划、点和划之间的停顿、每个字符之间短的停顿、每个词之…

为什么很多人吐槽谭浩强的C语言程序设计?

这个观点在网络上已经论战了很长时间&#xff0c;出现这种情况还是历史遗留问题&#xff0c;老谭出的C语言教材几乎是国内的第一版&#xff0c;由于中英翻译问题或者对编程文化理解的差异性导致出来的书多多少少存在一些纰漏。不能只是记住其缺点&#xff0c;老谭书最主要在那个…

谭浩强老师C语言第五版第六章(上)

第3、7题难在了数学思路上&#xff08;不会或理解不了私信&#xff09; 仅代表个人看法 如有错误请指正 题目1&#xff1a;用筛选法求100 之内的素数。 代码如下&#xff1a; #include <stdio.h> #include <math.h> int main() { int i, j, n, a[101]; …

第1章 引论 - 数据结构与算法分析 c语言描述

前言&#xff1a;此类型的文章皆为本人在阅读此书后给出的关于此书的理解&#xff0c;以及知识的梳理复习。若对文章有不解之处&#xff0c;或者文章有错欢迎评论区留言。 1.1 本书讨论的内容 有一组N个数&#xff0c;要找出其中第k个最大者&#xff0c;我们称之为选择问题(se…

谭浩强老师C语言第五版第五章(上)

本文涉及字符宽度&#xff0c;暂不做讲解&#xff0c;不懂留言 仅代表个人看法 如有侵权请说明 题目1&#xff1a;请画出例 5.6 中给出的3个程序段的流程图。 程序如下1、 #include <stdio.h> int main() { int i, j, n 0; for (i 1; i < 4; i) …

谭浩强C语言程序设计(1-3章代码学习)

谭浩强C语言程序设计 参考书 C语言学习笔记记录&#xff0c;学习为主&#xff0c;新手小白入门 我所用的C语言在线编译器&#xff1a;lightly在线编译工具 可新建工程 谭浩强C语言程序设计书籍所包含的代码示例加注释说明如下&#xff1a; /*笔记记录者&#xff1a;xy;学习教…

谭浩强C语言第九章知识总结

第九章 shyu 结构体&#xff1a;用户自定义的数据类型 如&#xff1a;在描述一个学生的相关信息时&#xff0c;需要整型变量来记录学号&#xff0c;字符数组来记录名字&#xff0c;等等&#xff0c;物品们可以通过定义结构体改变变量的数据类型&#xff0c;把这些信息整成一…

谭浩强C语言第七章知识总结

第七章 定义函数 定义没有参数的函数&#xff0c; 类型名 函数名&#xff08;&#xff09; 类型名 函数名&#xff08;void&#xff09; { { 函数体 或 函数体 } …

C语言 谭浩强 题目 -第六章

文章目录 笔记字符数组字符数组输出字符串处理函数输入字符串的函数 gets&#xff08;&#xff09;字符串连接函数--strcat字符串赋值函数--strcpy字符串比较函数---strcmp测字符串长度的函数--strlen转换为大小写的函数 EG 1EG 2EG 3 排序 冒泡排序 不用函数EG 4EG 5EG 6EG 7E…

C语言 谭浩强 题目 -第八章

文章目录 笔记通过指针引用数组用数组名作函数参数以变量名和数组名作为函数参数的比较 例题【例8.2】【例8.6】【例8.3】【例 8.4】【例 8.5】【例 8.6】【例8.7】【例8.8】【例8.9】【例 8.10】选择法起泡法 【例 8.11】【例 8.12】【例 8.13】【例8.30】 用指向数组的指针作…

C语言 谭浩强 题目 -第七章

文章目录 笔记函数参数函数调用返回值函数的嵌套函数的递归数组作为函数参数多维数组名作函数参数局部变量和全局变量全局变量 变量的存储方式和生存期自动变量(auto变量)static静态局部变量寄存器变量(register变量) 全局变量在一个文件内扩展外部变量的作用域将外部变量的作用…