【发布时间】:2018-12-04 15:20:03
【问题描述】:
我试图返回两个字符串之间的公共子字符串的长度。我非常了解 DP 解决方案,但是我希望能够递归地解决这个问题,只是为了练习。
我有办法找到最长的公共子序列...
def get_substring(str1, str2, i, j):
if i == 0 or j == 0:
return
elif str1[i-1] == str2[j-1]:
return 1 + get_substring(str1, str2, i-1, j-1)
else:
return max(get_substring(str1, str2, i, j-1), get_substring(str1, str2, j-1, i))
但是,我需要最长的公共子字符串,而不是最长的公共字母序列。我尝试以多种方式更改我的代码,其中一种是将基本情况更改为...
if i == 0 or j == 0 or str1[i-1] != str2[j-1]:
return 0
但这没有用,我的任何其他尝试也没有。
例如,对于以下字符串...
X = "AGGTAB"
Y = "BAGGTXAYB"
print(get_substring(X, Y, len(X), len(Y)))
最长的子串是AGGT。
我的递归技能不是最好的,所以如果有人可以帮助我,那将非常有帮助。
【问题讨论】: