LeetCode 500.键盘行(python)
500.键盘行
题目链接
给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。
示例:
输入: [“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