所以,我有一个问题,就是给出两个相同长度的字符串,我必须告诉我必须在第一个字符串中改变多少个字母才能使它成为第二个字符串的字谜。
这就是我所做的:
count = 0
Mutable_str = ''.join(sorted("hhpddlnnsjfoyxpci"))
Ref_str = ''.join(sorted("ioigvjqzfbpllssuj"))
i = 0
while i < len(Mutable_str):
if Mutable_str[i] != Ref_str[i]:
count += 1
i += 1
print(count)
我的算法在这种情况下给出了16个结果。但正确答案是10.有人能告诉我我的代码有什么问题吗? 非常感谢你!
答案 0 :(得分:1)
您需要使用str.count
因此,您需要将不同character
中每个strings
的出现次数之间的差异相加。这可以通过str.count(c)
来完成,其中c
在第二个character
(与string
一起获得)中各自为set()
。然后,我们需要对max()
的差异使用0
,这样如果差异为negative
,则不会影响总数differences
。
正如你所看到的,它归结为一个整洁的小one-liner
:
def changes(s1, s2):
return sum(max(0, s2.count(c) - s1.count(c)) for c in set(s2))
和一些测试:
>>> changes("hhpddlnnsjfoyxpci", "ioigvjqzfbpllssuj")
10
>>> changes("abc", "bcd")
1
>>> changes("jimmy", "bobby")
4