LeetCode500. Keyboard Row

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.

【题目】
对于输入的单词list,如果单词的每个字母都是在键盘上的一行内,则返回这种单词的list。
【解法1】
对每个单词拆解成元素集,分别与每行字母组成的元素集,进行取交集,如果返回的结果为原单词的元素(也就是单词是键盘行的子集),则认为这个单词满足条件。
  • python的set是一个无序不重复元素集,基本功能包括关系测试和消除重复元素. 集合对象还支持并、交、差、对称差等
  • 对list取交集为‘&’, 并集为'|'
class Solution(object):
    def findWords(self, words):
        """
        :type words: List[str]
        :rtype: List[str]
        """
        row_1=set('qwertyuiop')
        row_2=set('asdfghjkl')
        row_3=set('zxcvbnm')
        
        ans=[]
        
        for i in words:
            word=set(i.lower())
            if word&row_1 == word :
                ans.append(i)
            elif word&row_2 == word:
                ans.append(i)
            elif word&row_3==word:
                ans.append(i)
                
        return ans
【解法2】
正则匹配
re.compile :编译正则表达式模式,返回一个对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率。)
filter()函数 :用于过滤序列。和map()类似,filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
class Solution(object):
    def findWords(self, words):
        """
        :type words: List[str]
        :rtype: List[str]
        """   	 
	return filter(re.compile('(?i)([qwertyuiop]*|[asdfghjkl]*|[zxcvbnm]*)$').match, words)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值