开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情
500. 键盘行
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/ke…
给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
美式键盘 中:
- 第一行由字符 "qwertyuiop" 组成。
- 第二行由字符 "asdfghjkl" 组成。
- 第三行由字符 "zxcvbnm" 组成。
示例 1:
输入:words = ["Hello","Alaska","Dad","Peace"] 输出:["Alaska","Dad"]
示例 2:
输入:words = ["omk"] 输出:[]
示例 3: 输入:words = ["adsdf","sfd"] 输出:["adsdf","sfd"]
提示:
1 <= words.length <= 20 1 <= words[i].length <= 100 words[i] 由英文字母(小写和大写字母)组成
解法
- 使用字典和列表,遍历,如果遍历时候只出现一次时候,导入到列表中,如果出现是两行及以上,继续遍历。注意大小写问题
class Solution:
def findWords(self, words: List[str]) -> List[str]:
indexs = {
'q': 1, 'w': 1, 'e': 1, 'r': 1, 't': 1, 'y': 1,
'u': 1, 'i': 1, 'o': 1, 'p': 1,
'a': 2, 's': 2, 'd': 2, 'f': 2, 'g': 2, 'h':2, 'j': 2, 'k': 2, 'l': 2,
'z': 3, 'x': 3, 'c': 3, 'v': 3, 'b': 3, 'n': 3, 'm': 3}
ans = []
for word in words:
res = {}
flag = 0
for w in word:
index = indexs[w.lower()] # 统一成小写
if len(res) == 0:
res[index] = ''
else:
if index not in res:
flag = 1
break
if flag == 0:
ans.append(word)
return ans
复杂度分析
- 时间复杂度: O(n)
- 空间复杂度: O(n)