试图找到两个字符串的最长公共序列。我的代码可以正常工作,并且可以提供正确的解决方案,但是需要花费很长时间。
我知道我必须使用记忆来跟踪结果,但是我对如何在此特定问题中使用它感到困惑。注意:我不允许使用任何循环。这是我的代码
def longest_common_substring(s1, s2):
""" finds the longest common substring of two strings """
final = ''
if s1[0] == s2[0]:
final += (s1[0])
if len(s1) > 1 and len(s2) > 1:
final += (longest_common_substring(s1[1:], s2[1:]))
else:
if len(s1) > 1 and len(s2) > 1:
left = longest_common_substring(s1[1:], s2)
right = longest_common_substring(s1, s2[1:])
if len(left) > len(right):
final += left
else:
final += right
elif len(s1) == 1 and len(s2) > 1:
final += longest_common_substring(s1, s2[1:])
elif len(s2) == 1 and len(s1) > 1:
final += longest_common_substring(s1[1:], s2)
return final
例如,两个字符串的代码“看着我,我会飞!”并且“看看那是一次苍蝇”应该返回“看一下,一次苍蝇”,它对我的代码有用,但是不够快。