LeetCode 500.键盘行(python)

500.键盘行
题目链接
给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。

LeetCode 500.键盘行(python)示例:

输入: [“Hello”, “Alaska”, “Dad”, “Peace”]
输出: [“Alaska”, “Dad”]

注意:

你可以重复使用键盘上同一字符。
你可以假设输入的字符串将只包含字母。

解题思路:
将键盘字符每一行放入一个列表中,然后依次对每一个单词进行判断,是否可以由第一行输出、第二行输出、第三行输出;
由于每个单词都要进行三行判断,所以将判断一个单词在不在一行写成一个函数,用一个flag标志记录单词中在某一行的个数,若最后flag等于单词长度,说明该单词可由一行输出。
p.s.由于给定的单词中包含大写字母,所以在判断时要将单词宣布转换为小写
p.s.别人的做法:,把三个键盘行放入一个列表中,用三重循环进行判断,k表示单词中的字母,j表示键盘的一行,若k不在这一行,直接结束这一层循环,若k在这一行,则继续判断,直到最后一个字母也在这一行,则将这个单词i添加倒输出列表中。

#                     if  k not in j:
#                         break
#                     elif k == ss[-1]:
#                         res.append(i)
def oneline(word,f):#判断单词是不是在一行
    flag=0
    for i in word.lower():
        if i in f:
            flag+=1
    if flag==len(word):
        return 1
    else:
        return 0
    
class Solution:
    def findWords(self, words: List[str]) -> List[str]:
        f1=['q','w','e','r','t','y','u','i','o','p']
        f2=['a','s','d','f','g','h','j','k','l']
        f3=['z','x','c','v','b','n','m']
        A=[]
        for word in words:
                a=oneline(word,f1)#判断单词是不是在第一行
                b=oneline(word,f2)
                c=oneline(word,f3)
               # print(word,a,b,c)
                if (a or b or c) ==1: 
                    A.append(word)
        return A