首页 > 解决方案 > Python中的Jscore

问题描述

我必须编写一个名为 jscore 的函数,它接受两个输入 s1 和 s2。

jscore( s1, s2 ) 它需要两个字符串,s1 和 s2,它应该输出 s1 与 s2 相比的 jotto 分数。这个 jotto 分数是 s1 中由 共享的字符数。重复的字母会被计算多次,只要它们在两个字符串中出现多次。

>>> jscore( 'diner', 'syrup' )  # just the 'r'
1
>>> jscore( 'geese', 'elate' )  # two 'e's are shared
2

我已经有这个代码:

def jscore(s1,s2):
    if len(s1) == 0 or len(s2) == 0:
        return 0
    ss1 = [0] * 26
    ss2 = [0] * 26
    for x in s1:
        ss1[ord(x)-97] = ss1[ord(x)-97]+ 1
    for z in s2:
        ss2[ord(z)-97] = ss2[ord(z)-97]+ 1
        result = 0
    for i in range(0,27):
        result = result + min(ss1[i], ss2[i])
        return result 

但它总是返回比实际的 jscore 少一个。jscore('always', 'bananas') 在应该返回 3 时返回 2。有什么想法吗?

标签: python-3.x

解决方案


您的代码只有两个我可以看到的错误,首先返回缩进太远,因此它阻止了最终循环运行,其次最终循环运行了一次迭代太多。更正后,它会产生预期的输出:

def jscore(s1,s2):
if len(s1) == 0 or len(s2) == 0:
    return 0
ss1 = [0] * 26
ss2 = [0] * 26
for x in s1:
    ss1[ord(x)-97] = ss1[ord(x)-97]+ 1
for z in s2:
    ss2[ord(z)-97] = ss2[ord(z)-97]+ 1
    result = 0
for i in range(0,26):
    result = result + min(ss1[i], ss2[i])
return result 

如果您尝试了更多测试用例,您可能会自己发现这一点,因为错误意味着您只检查过字母“a”。


推荐阅读