给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。
示例1:
输入: ["Hello", "Alaska", "Dad", "Peace"]
输出: ["Alaska", "Dad"]
注意:
- 你可以重复使用键盘上同一字符。
- 你可以假设输入的字符串将只包含字母。
思路:
1.建立和键盘对应的三个list和一个返回List
a=['q','w','e','r','t','y','u','i','o','p']
b=['a','s','d','f','g','h','j','k','l']
c=['z','x','c','v','b','n','m']
e=['']
2.列表中的字符串包括了大写和小写字母,这里将其全部转化为小写。同时因为最后输出的为原列表中满足要求的字符串,因此需要使用循环重新复制一个原列表。(这里不能使用列表 a=words ,这样a同样指向words的内存空间,修改words同样会导致a的变化)
3.判断a中的每项字符串首字母属于哪个list,如属于a则继续判断该字符串的下一个字母是否在a中,不在break,判断下一个字符串。若全部在一个list中,当循环到该字符串最后一个字母时,将该字符串的所属列表的位置i赋给words[](原列表)添加在e中
4.返回e,由于e的首项为"",因此返回e[1:](切片)
code:
class Solution(object):
def findWords(self, words):
"""
:type words: List[str]
:rtype: List[str]
"""
a=['q','w','e','r','t','y','u','i','o','p']
b=['a','s','d','f','g','h','j','k','l']
c=['z','x','c','v','b','n','m']
d=['']*len(words)
e=['']
for i in range(0,len(words)):
d[i]=words[i]
for i in range(0,len(d)):
d[i]=d[i].lower()
o=int(len(d[i]))
if d[i][0] in a:
for j in range(0,o):
if d[i][j] not in a:
break
if j==o-1:
e.append(words[i])
elif d[i][0] in b:
for j in range(0,o):
if d[i][j] not in b:
break
if j==o-1:
e.append(words[i])
elif d[i][0] in c:
for j in range(0,o):
if d[i][j] not in c:
break
if j==o-1:
e.append(words[i])
return e[1:]