python-3.x - 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。有什么想法吗?
解决方案
您的代码只有两个我可以看到的错误,首先返回缩进太远,因此它阻止了最终循环运行,其次最终循环运行了一次迭代太多。更正后,它会产生预期的输出:
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”。
推荐阅读
- android - 如何在 Android Kotlin 中使用 onclicklistner 获取按钮文本?
- ansible - 用字典迭代字典列表
- flutter - 如何在windows中像DLL一样在flutter中创建动态链接库
- sql - SQL 查询中的 HTML
- c++ - C++ 数值导数
- flutter - 网络爬虫包是否有限制或其他?
- firebase - Firebase - Web - 测试安全规则 - 无法访问 Cloud Firestore 后端
- flutter - 颤振插件很慢
- algorithm - 动态规划/子问题+过渡
- bash - 为什么 BASHPID 在此处的字符串中发生变化