开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情
一、题目描述:
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如:
- '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] 由小写英文字母组成
二、思路分析:
将字母与相应的密码作为键值对存入字典 2、遍历每个单词,对每个单词遍历字母,用字符串temp存放该单词的密码,通过字典和对应字母找到相应的密码添加入temp中 3、判断out_list 是否存在相同的密码串,若没有则添加 4、全部遍历完成后返回out_list的长度
三、AC 代码:
class Solution(object):
def uniqueMorseRepresentations(self, words):
"""
:type words: List[str]
:rtype: int
"""
lit = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.",
"---",".--.","--.-",".-.","...", "-","..-","...-",".--","-..-","-.--","--.."]
dic = {}
for i in range(26):
dic[chr(ord('a')+i)] = lit[i]
out_list = []
for word in words:
temp = ''
for char in word:
temp += dic[char]
if temp not in out_list:
out_list.append(temp)
return len(out_list)
四、参考:
【track & traning】一行代码,思路简单,性能高效接近100 - 唯一摩尔斯密码词 - 力扣(LeetCode)
804. 唯一摩尔斯密码词 Java 75.06% HashSet || Trie - 唯一摩尔斯密码词 - 力扣(LeetCode)
804. 唯一摩尔斯密码词 Java 75.06% HashSet || Trie - 唯一摩尔斯密码词 - 力扣(LeetCode)