500 键盘行(枚举)

布满荆棘的人生 2022-10-04 12:51 255阅读 0赞

1. 问题描述:

给你一个字符串数组 words ,只返回可以使用在美式键盘同一行的字母打印出来的单词。键盘如下图所示。
美式键盘中:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NDQ1MTY1_size_16_color_FFFFFF_t_70

第一行由字符 “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] 由英文字母(小写和大写字母)组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/keyboard-row

2. 思路分析:

分析题目可以知道我们考虑怎么样枚举即可,首先我们需要使用哈希表记录一下每一行的字符对应的行数,遍历所有的单词,使用set集合来记录当前单词中的字符在哈希表中出现的位置,最后判断set集合的长度是否是1即可,如果是1那么将当前单词加入到答案中即可。

3. 代码如下:

  1. from typing import List
  2. class Solution:
  3. def findWords(self, words: List[str]) -> List[str]:
  4. # 键盘中每一行对应的字符
  5. s = ["qwertyuiop", "asdfghjkl", "zxcvbnm"]
  6. dic = dict()
  7. # 使用字典记录下每个字符出现的行数
  8. for i in range(len(s)):
  9. for c in s[i]:
  10. dic[c] = i
  11. res = list()
  12. for w in words:
  13. t = set()
  14. for c in w:
  15. # set集合中添加当前单词出现的行数, lower将大写字母转化为小写字母
  16. t.add(dic[c.lower()])
  17. if len(t) == 1: res.append(w)
  18. return res

发表评论

表情:
评论列表 (有 0 条评论,255人围观)

还没有评论,来说两句吧...

相关阅读