这是对代码战争臭名昭著的参考争夺 https://www.codewars.com/kata/55c04b4cc56a697bb0000048/train/python我无法理解为什么我的简单代码性能缓慢(根据 codewars 测试超过 12000 毫秒);我没有传出型,我很沮丧。
代码应该检查两个字符串,如果第一个字符串包含第二个字符串的所有字母,则应返回 True;例如:
- 打乱('rkqodlw','世界')==> True
- 打乱('cedewaraaossoqqyt','codewars')==> True
- scramble('katas', '牛排') ==> False
def scramble(s1,s2):
for n in s2:
if (s1.find(n)!=-1):
s1=s1.replace(n,"",1)
s2=s2.replace(n,"",1)
if s2=="": return True
else: return False
只是有一种更简单的方法可以做到这一点。
您可以执行的基本步骤是
- 计算 s1 中每个字符的数量。使用字典。
- 遍历 s2 中的每个字符。确保它存在于 s1 中,或者是否还剩下任何 s1 字符
按照您的方式,查找和替换算法都有隐式循环,这使得速度变慢。使用下面给出的算法。不存在隐式循环。
def scramble(s1, s2):
p = {}
for x in s1:
if(not x in p):
p[x] = 1
else:
p[x] += 1
for x in s2:
if((not x in p) or (p[x] == 0)):
return False
elif (x in p):
p[x] -= 1
return True
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)