【leetcode】500. Keyboard Row

42.21%  很笨的方法,连用三个循环 不过一次过

class Solution(object):
    def findWords(self, words):
        """
        :type words: List[str]
        :rtype: List[str]
        """
        keyboard = ['qwertyuiopQWERTYUIOP','asdfghjklASDFGHJKL','zxcvbnmZXCVBNM']
        result = []
        for char in words:
            choose = True
            for i,ch in enumerate(char):
                for index,key in enumerate(keyboard):
                    if ch in key:
                        mark = index
                if i==0:
                    marks = mark
                elif marks!=mark:
                    choose = False
                    break
            if choose:
                result.append(char)
        return result

——————————————————————————

python正则表达式来学习一波:

re.match(pattern, string, flags=0)

从字串的起始来匹配一个模式pattern,如果不是起始位置匹配成功的话,match()返回none

当匹配成功时返回一个match对象

span([group]) 方法返回 (start(group), end(group))

group([group1, …]) 方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group()或 group(0)

eg:

print(re.match('www', 'www.runoob.com').span()) #(0,3)

print(re.match('com', 'www.runoob.com')) #none,注意此时none type have no attribution ‘span’

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。

由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r'\t',等价于 '\\t')匹配相应的特殊字符。

50.13%

其中(?i)表示不论大小写,[ ]表示括号中的任意字母,※表示任意多个,$表示匹配到结尾

import re
class Solution(object):
    def findWords(self, words):
        """
        :type words: List[str]
        :rtype: List[str]
        """
        return filter( re.compile('(?i)([qwertyuiop]*|[asdfghjkl]*|[zxcvbnm]*)$').match ,words)

——————————————————————————————————————————————

学习用set,集合表示一波

还有学习一个函数:word.lower()

note:查看字串是否由某些字母组成,可以使用set集合交集来判断

92.99%

import re
class Solution(object):
    def findWords(self, words):
        """
        :type words: List[str]
        :rtype: List[str]
        """
        result = []
        a = set('qwertyuiop')
        b = set('asdfghjkl')
        c = set('zxcvbnm')
        for char in words:
            d = set(char.lower())
            if d&a==d or d&b==d or d&c==d:
                result.append(char)
        return result

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值