优化一下
def f338(lst):
t = set("qwertyuiop")
m = set("asdfghjkl")
l = set("zxcvbnm")
n = []
for i in lst:
k = set(i.lower())
if k & t == k or k & m == k or k & l == k:
n.append(i)
return n
zltzlt 发表于 2020-2-28 19:37
解答错误
输入:['qaz', 'wsx', 'edc', 'rfv', 'tgb', 'yhn', 'ujm', 'ik', 'pklo', 'ppppppp']
下面已改,还以为是首字母要大写的{:10_247:}
kinkon 发表于 2020-2-28 19:44
优化一下
108 ms
我4,5,6楼的答案不测吗?
fan1993423 发表于 2020-2-28 17:18
差集
300 ms
本帖最后由 鱼C之斗者 于 2020-2-28 20:13 编辑
list1 = ['qwertyuiopQWERTYUIOP','asdfghjklASDFGHJKL','zxcvbnmZXCVBNM']
list2 = 'list2 = '+input('请输入一个单词列表')
exec(list2)
list2_len = len(list2)
list3 = []
a = 0
while a < list2_len:
for b in list1:
c = len(list2)
f = 1;
for d in range(c):
if list2 not in b:
f=0
break;
if f:
list3.append(list2)
a += 1;
if len(list3):
print(list3)
kinkon 发表于 2020-2-28 19:38
解题思路居然和你的很接近
很正常,有集合的想法的话,就是差集,并集,交集,子集,不用的话就一个一个字母去比照,应该没有其他方法了
fan1993423 发表于 2020-2-28 17:20
交集
468 ms
fan1993423 发表于 2020-2-28 17:21
并集
解答错误
输入:["asdfghjkla","qwertyuiopq","zxcvbnzzm","asdfghjkla","qwertyuiopq","zxcvbnzzm"]
输出:["asdfghjkla","qwertyuiopq","asdfghjkla","qwertyuiopq"]
预期结果:["asdfghjkla","qwertyuiopq","zxcvbnzzm","asdfghjkla","qwertyuiopq","zxcvbnzzm"]
zltzlt 发表于 2020-2-28 19:59
解答错误
输入:["asdfghjkla","qwertyuiopq","zxcvbnzzm","asdfghjkla","qwertyuiopq","zxcvbnzzm"]
...
已改,忘了把最后的middle改为bottom
fan1993423 发表于 2020-2-28 20:01
已改,忘了把最后的middle改为bottom
嗯嗯,558 ms
难道集合中还是子集速度最快吗{:10_250:},本来最先想用子集的话,为了不和冬雪大佬一个思路没用{:10_250:}{:10_245:}
不对啊,我交集的答案和21楼一样,为什么它才100多ms,我是400多ms
fan1993423 发表于 2020-2-28 20:12
不对啊,我交集的答案和21楼一样,为什么它才100多ms,我是400多ms
你 set() 的次数太多了,我这里用的是超大的数据
zltzlt 发表于 2020-2-28 20:18
你 set() 的次数太多了,我这里用的是超大的数据
那行嘛,以后把set()单独赋值,我没想到这种影响速度
fan1993423 发表于 2020-2-28 20:31
那行嘛,以后把set()单独赋值,我没想到这种影响速度
{:10_250:}
zltzlt 发表于 2020-2-28 18:56
解答错误
输入:["Hello", "Alaska", "Dad", "Peace"]
惊了!!虽然的确这个解答有错,但是预期结果也是个错的耶。与示例有悖逆。
我就是针对的那个 'Hello'
本帖最后由 kinkon 于 2020-2-28 22:19 编辑
一行有点长,缩成两行,酱紫不知道会不会快一些
def p338(lst):
al = set("qwertyuiop"),set("asdfghjkl"),set("zxcvbnm")
return for i in range(len(lst)) for j in al if set(lst.lower()) <= j]
一行的也加上好了{:10_279:}
def p338(lst):
return for i in range(len(lst)) for j in if set(lst.lower()) <= j]
我来晚了,看看速度
def fun338(strArr):
Keyboard = []
Keyboard.append('QqWwEeRrTtYyUuIiOoPp')
Keyboard.append('AaSsDdFfGgHhJjKkLl')
Keyboard.append('ZzXxCcVvBbNnMm')
def inWhich(character):
for i in range(0,3):
if character in Keyboard:
return i
def isWordOk(word):
try:
state = inWhich(word)
except Exception:
return False
for each in set(word):
if each not in Keyboard:
return False
return True
result = []
for eachWord in strArr:
if isWordOk(eachWord):
result.append(eachWord)
return result
zltzlt 发表于 2020-2-28 18:56
解答错误
输入:["Hello", "Alaska", "Dad", "Peace"]
你这个不对呀,Hello不是同一行的吧,和实例不一样