【发布时间】:2020-03-04 15:42:17
【问题描述】:
我正在学习一些 Python,在此过程中,我正在从 codewars 中做一些简单的 katas。 我遇到了https://www.codewars.com/kata/scramblies 问题。
我的解决方案如下:
def scramble(s1,s2):
result = True
for character in s2:
if character not in s1:
return False
i = s1.index(character)
s1 = s1[0:i] + s1[i+1:]
return result
虽然结果正确,但速度还不够快。我的解决方案在 12000 毫秒后超时。 我查看了其他人提出的解决方案,其中一个涉及制作一套。
def scramble(s1,s2):
for letter in set(s2):
if s1.count(letter) < s2.count(letter):
return False
return True
为什么我的解决方案比其他解决方案慢很多?除非我误解了切片字符串的效率,否则它看起来不应该是这样。我解决这个问题的方法是否有缺陷?
【问题讨论】:
-
设置速度很快。
-
我用dis反汇编了这两个函数,你的是71个命令。而正确的只有
-
字节码指令的数量对算法的效率影响不大,这里的集合除了迭代之外没有其他用途。迭代一个集合并不比迭代一个序列快;好处来自当集合小于序列时,因为有很多重复元素。
标签: python-3.x string set slice