解决之路= =
题目描述
测试案例(部分)
第一次
没有想到有什么方便的方法,老老实实循环写吧。
循环判断每个词,然后先用词的第一个字确定所处哪个行,在用这个行进行循环判断,只要每个字都在该行,就可以加入到结果列表中,最后循环都结束过后,返回结果列表即可。
class Solution(object):
def getLine(self, key):
""" 确定行 """
lines = ["qwertyuiop", "asdfghjkl", "zxcvbnm"]
for line in lines:
if key.lower() in line:
return line
return None
def findWords(self, words):
# 结果列表
res = []
for word in words:
# 确定行
the_line = self.getLine(word[0])
# 标识
flag = 0
# 判断单词word是否所有字都处于一行
for i in word[1:]:
if i not in the_line:
flag = 1
# 标识正确就表示都处于一行,加入结果列表中
if flag == 0:
res.append(word)
return res
测试正确,但提交错误。
第二次
原因就是大小写的问题,看测试案例,以为只会首字母大写和全小写,原来中间也会有大写。
中间判断的时候处理一下即可。
class Solution(object):
def getLine(self, key):
""" 确定行 """
lines = ["qwertyuiop", "asdfghjkl", "zxcvbnm"]
for line in lines:
if key.lower() in line:
return line
return None
def findWords(self, words):
res = []
for word in words:
the_line = self.getLine(word[0])
the_word = word.lower()
flag = 0
for i in the_word:
if i not in the_line:
flag = 1
if flag == 0:
res.append(word)
return res
测试正确,提交成功。耗时方面也很快,合格了。
第三次(集合方法)
在评论区也学到了集合的方法。创建三行字母的集合,然后把单词放到集合里,接着判断是否是子集关系,就可以判断单词中的字母是否都在一行了。
class Solution(object):
def findWords(self, words):
set1 = set('qwertyuiop')
set2 = set('asdfghjkl')
set3 = set('zxcvbnm')
res = []
for i in words:
x = i.lower()
setx = set(x)
if setx<=set1 or setx<=set2 or setx<=set3:
res.append(i)
return res
不过,效率和自己写的差不多。。。没有很多提高
杂谈
周末不写中等题了,有的简单题也挺难的,最近卡了一个简单题,在学怎么用动态规划做。