leetcode算法: Keyboard Row

本文介绍了一种筛选特定单词的方法,即找出所有字母都在键盘同一行上的单词。通过使用Python中的集合概念,文章提供了一个简洁高效的解决方案。
Given a List of words, return the words that can be typed using letters of alphabet on only one row's of American keyboard like the image below.


American keyboard


Example 1:
Input: ["Hello", "Alaska", "Dad", "Peace"]
Output: ["Alaska", "Dad"]
Note:
You may use one character in the keyboard more than once.
You may assume the input string will only contain letters of alphabet.


这道题描述的是:
给定一些单词,让我们找出这些单词中哪些单词是 所有字母都在键盘同一行上


qwertyuiop是键盘的第一行
asdfghjkl是键盘的第二行
zxcvbnm是键盘第三行


刚拿到这道题还真的很头疼- -难道要对单词每个字母进行遍历吗??

后来参考了其他大神的思想,大致是两种思路,一种是正则表达式匹配,另一种是集合思想。
我用了集合的思想。用三个集合分别存下键盘个行的所有字母。
当给定一个单词 我们看看这个单词是不是这三个集合某一个的子集,如果是,那这个单词就满足字母都在一行

我的代码:
 1 class Solution(object):
 2     def findWords(self, words):
 3         """
 4         :type words: List[str]
 5         :rtype: List[str]
 6         """
 7         q,a,z = set("qwertyuiop"), set("asdfghjkl"), set("zxcvbnm")
 8         res = []
 9         for str in words:
10             lset = set(str.lower() )
11             if lset.issubset(q) or lset.issubset(a) or lset.issubset(z):
12                 res.append(str)
13         return res
14 
15 
16 
17 if __name__ == '__main__':
18     s = Solution()
19     res = s.findWords(["Hello", "Alaska", "Dad", "Peace"])
20     print(res)

 

转载于:https://www.cnblogs.com/Lin-Yi/p/7501774.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值