LeetCode 804. 唯一摩尔斯密码词

75 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情

一、题目描述:

804. 唯一摩尔斯密码词 - 力扣(LeetCode)

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

  • '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)