-
题目描述:给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。
图例 - 链接:https://leetcode-cn.com/problems/keyboard-row/
解题思路:
1.设置三个集合,分布存储键盘上三行字母
2.判断单词中所有的字母是否出现在这三个集合即可Python版:
class Solution:
def findWords(self, words: List[str]) -> List[str]:
line1, line2, line3 = set('qwertyuiop'), set('asdfghjkl'), set('zxcvbnm')
res = []
for word in words:
w = set(word.lower())
if w.issubset(line1) or w.issubset(line2) or w.issubset(line3):
res.append(word)
return res
Tips:
使用set()方便去重
-
issubset()方法:用于判断集合的所有元素是否都包含在指定集合中,如果是则返回 True,否则返回 False。
- 使用方法:set.issubset(set)
简洁版
class Solution:
def findWords(self, words: List[str]) -> List[str]:
return list(filter(lambda word: any(set(word.lower()).issubset(line) for line in [set('asdfghjkl'),set('qwertyuiop'),set('zxcvbnm')]),words))
- 链接:https://leetcode-cn.com/problems/keyboard-row/solution/yi-xing-shi-yong-filterhan-shu-de-yi-xing-pythonli/
Tips: - any() 函数用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True。元素除了是 0、空、FALSE 外都算 TRUE。
- 简单介绍一下filter()函数
这个函数接收两个参数,第一个是一个函数,这个函数要求返回一个布尔变量。第二个是一个列表。
然后对于列表的每一项,运行这个函数
如果运行的结果是True,那么留下这一项,否则删掉
即直观上的「筛选」过程。
最后要转成list类型,否则是一个filter类型。
举例而言a = list(filter(lambda x: x % 2 == 1,[1,2,3]))
相当于把[1,2,3]这个列表所有的奇数提取出来,返回一个[1,3]