方法一:模拟法
class Solution:
def findWords(self, words: List[str]) -> List[str]:
#方法一:模拟法
my_words = []
n, m, q = 0, 0, 0
for each in words:
l = len(each)
for i in each:
j = i.lower()
if j in "qwertyuiop":
n += 1
elif j in "asdfghjkl":
m += 1
elif j in "zxcvbnm":
q += 1
if n == l or m == l or q == l:
my_words.append(each)
n, m, q = 0, 0, 0
# if all(i.lower() in "qwertyuiop" for i in each) or all(i.lower() in "asdfghjkl" for i in each) or all(i.lower() in "zxcvbnm" for i in each):
# my_words.append(each)
return my_words
总结:判断可迭代对象内的元素属于同一类的方法
1. 暴力法:通过统计数量判断,同类数量与可迭代对象长度相等,则可迭代对象内的元素属同一类
2. 使用all()方法
方法二:strip()
思想:通过strip()去除字符串中指定的字符,如果去除字符的字符串为空,表示该字符串中的所有字符都在指定去除字符串中
class Solution:
def findWords(self, words: List[str]) -> List[str]:
#方法二:strip()
my_words = []
for each in words:
i = each.lower()
if i.strip("qwertyuiop") == "" or i.strip("asdfghjkl") == "" or i.strip("zxcvbnm") == "":
my_words.append(each)
return my_words
方法三:哈希表
思想:
1.使用字符串来表示26个小写字母所在的行
2.循环判断每个每个字符串中的字符是否在同一行
2.1首先获取每个字符串首字母所在的行(哈希表)
2.2判断字符串中所有的字符是否都在相同的行(哈希表)
class Solution:
def findWords(self, words: List[str]) -> List[str]:
#方法三:哈希表
my_words = []
word_id= "12210111011122000010020202"
for each in words:
first_id = word_id[ord(each[0].lower()) - ord('a')]
if all(word_id[ord(i.lower()) - ord('a')] == first_id for i in each):
# for i in each:
# if word_id[ord(i) - ord('a')] == first_id:
my_words.append(each)
return my_words