def longest_common_subseq(str1, str2):
value = [[0 for j in range(len(str2) + 1)] for i in range(len(str1) + 1)]
for i in range(1, len(str1) + 1):
for j in range(1, len(str2) + 1):
if str1[i - 1] == str2[j - 1]:
value[i][j] = value[i - 1][j - 1] + 1
else:
value[i][j] = max(value[i - 1][j], value[i][j - 1])
return value[-1][-1]
def longest_common_substr(str1, str2):
value = [[0 for j in range(len(str2) + 1)] for i in range(len(str1) + 1)]
for i in range(1, len(str1) + 1):
for j in range(1, len(str2) + 1):
if str1[i - 1] == str2[j - 1]:
value[i][j] = value[i - 1][j - 1] + 1
else:
value[i][j] = 0
max_value = max([max(value[i]) for i in range(len(value))])
return max_value
# 测试通过
str1 = "abcdefg"
str2 = "bcbcbceda"
print(longest_common_subseq(str1, str2))
print(longest_common_substr(str1, str2))
动态规划思想
本文介绍了如何使用动态规划解决最长公共子序列和最长公共子串的问题,提供了详细的Python实现代码,并通过实例测试验证了算法的有效性。
1284

被折叠的 条评论
为什么被折叠?



