【LeetCode】500. 键盘行

424 阅读2分钟

image.png

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

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

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

一、题目描述:

  • 题目内容

image.png

  • 题目示例

image.png

  • 题目解析

    • 本题给出一个words列表。其元素是由英文大小写组成。
    • words列表元素长度在[1,21],words[i] 长度在[1,101]

二、思路分析:

我们拿到本题根据题意,要求对列表的单词,求出在键盘同一行的字母打印出来的单词。

因此,我们可以定义三个变量来存储键盘三行的字母,如图所示:

image.png

one = "qwertyuiop"
two = "asdfghjkl"
three = "zxcvbnm"

因此,我们解答本题可以使用模拟查找的方法进行,思路如下:

  • 首先遍历words列表里的每一个单词
  • 因为单词列表的单词包含大小写,先对所取的单词进行小写转换lower()
  • 对取出的单词,先进行其首字母判断在键盘的哪一行,并赋值给tmp
  • 然后对小写单词的每一个字母进行判断是否在tmp,如果在则临时变量s进行加1
  • 当遍历完单词后对单词长度与变量s进行比较,如果相同则将word元素添加到列表ans
  • 直到遍历完所有的words列表里的元素,并返回列表ans

image.png

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

        one = "qwertyuiop"
        two = "asdfghjkl"
        three = "zxcvbnm"
        ans = []
        for word in words:
            lower = word.lower()
            if lower[0] in one:tmp = one
            elif lower[0] in two:tmp = two
            else:tmp =  three
            s = 0
            for i in  range(len(lower)):
                if lower[i] in tmp:                    
                    s = s+1
            if len(word) == s:ans.append(word)

        return ans

三、总结:

本题,我们借鉴的是哈希表的思想,模拟单词查找。AC记录如下:

image.png

时间复杂度O(L),是words列表里所有元素的长度之和 空间复杂度O(N),使用列表来添加在同一行的单词

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