【LeetCode】804. 唯一摩尔斯密码词

142 阅读2分钟

image.png

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第10天,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

image.png

  • 题目示例

image.png

  • 题目解析

    • 本题给出words列表,元素由小写字母的单词组成
    • 要求对Words列表每一个单词进行摩尔福斯编码,返回不同编码的数量。

二、思路分析:

我们拿到本题,要求我们模拟摩尔福斯编码的过程,手动模拟单词编码过程是这样的:

  1. 取出单词的每一个字母
  2. 在摩尔福斯密码中一一找到对应字母的编码字符。如a字母对应的编码是".-"
  3. 然后将找到的编码组合在一起,就完成了一个单词的编码。如"gin" -> "--...-."

对于一个单词的编码过程有了清晰地认识,那么题目给出的words单词列表也很容易的实现了。

  • 首先遍历words列表,取出每一个单词
  • 对取出的单词,再使用for循环取出单词的每一个字母
  • 由于题目给出了摩尔福斯26个字母的编码列表,因此可以通过字母的ASCII码与A字母ASCII码相减,就计算出字母的所在的位置。
  • 取出的编码,通过字符串进行拼接,添加到临时列表morse里。
  • 最后遍历完所有的Words列表单词,将临时列表morse转换成集合去掉重复元素,即结果就是集合的长度。

我们通过,画图来模拟以上思路吧:

image.png

image.png

image.png

根据上述思路分析,使用Python很容易实现。代码如下:

class Solution(object):
    def uniqueMorseRepresentations(self, words):
        """
        :type words: List[str]
        :rtype: int
        """

        MORSE = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]

        morse = [] 
        for word in words:  
            S = ""
            for i in range(len(word)):
                tmp = ord(word[i]) - 97
                S = S + MORSE[tmp]
                print(S)
            
            morse.append(S)

        return len(set(morse))

三、总结:

本题,考察是字符串遍历拼接操作,AC记录:

image.png

时间复杂度O(S),S是words列表所有单词的长度。 空间复杂度O(S),S是words列表所有单词的长度。

以上是本期内容,欢迎大佬们点赞评论,下期见~~