本题注意点:∀、∃、差集、空集判断,分别对应all、any、-、not,所以说离散数学还是很有用的。
通过all、any,再也不需要立一个flag了。
import numpy as np
def findWords(words):
"""
:type words: List[str]
:rtype: List[str]
"""
keys = [
'QWERTYUIOPqwertyuiop',
'ASDFGHJKLasdfghjkl',
'ZXCVBNMzxcvbnm',
]
ans = []
for word in words:
for key in keys:
if all(letter in key for letter in word): # 或用word.lower()先预处理,这样keys只要放小写即可
ans.append(word)
return ans
"""
version2: 其中row为3个set之一,减号可求差集,not用来判断是不是空集
return [w for w in words if any(not set(w.lower()) - row for row in (set("qwertyuiop"), set("asdfghjkl"), set("zxcvbnm")))]
"""
# sample:
words = ["Hello", "Alaska", "Dad", "Peace"]
print(findWords(words))