最长公共子串要求字符必须是连续的,而最长公共子序列不要求连续。
# 最长公共字串
def longest_substring(str1, str2):
flag = [[0 for i in range(len(str2)+1)] for j in range(len(str2)+1)]
max_len = 0 # 最长字串的长度
end_p = 0 # 最长字串的结束点
for i in range(len(str1)):
for j in range(len(str2)):
if str1[i] == str2[j]:
flag[i+1][j+1] = flag[i][j]+1
if flag[i+1][j+1]>max_len:
max_len = flag[i+1][j+1]
end_p = i+1
return str1[end_p-max_len:end_p], max_len
# 最长公共子序列
def LCS(str1, str2):
参考:
Python最长公共子串和最长公共子序列的实现_wateryouyo的博客-CSDN博客blog.csdn.net