一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 本题给出一个words列表。其元素是由英文大小写组成。
- words列表元素长度在[1,21],words[i] 长度在[1,101]
二、思路分析:
我们拿到本题根据题意,要求对列表的单词,求出在键盘同一行的字母打印出来的单词。
因此,我们可以定义三个变量来存储键盘三行的字母,如图所示:
one = "qwertyuiop"
two = "asdfghjkl"
three = "zxcvbnm"
因此,我们解答本题可以使用模拟查找的方法进行,思路如下:
- 首先遍历words列表里的每一个单词
- 因为单词列表的单词包含大小写,先对所取的单词进行小写转换lower()
- 对取出的单词,先进行其首字母判断在键盘的哪一行,并赋值给tmp
- 然后对小写单词的每一个字母进行判断是否在tmp,如果在则临时变量s进行加1
- 当遍历完单词后对单词长度与变量s进行比较,如果相同则将word元素添加到列表ans
- 直到遍历完所有的words列表里的元素,并返回列表ans
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记录如下:
时间复杂度O(L),是words列表里所有元素的长度之和 空间复杂度O(N),使用列表来添加在同一行的单词
以上是本期内容,欢迎大佬们点赞评论,下期见~~