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