Python函数:如何获取两个字符串的最长公共子串?
发布时间:2023-07-03 12:17:44
要获取两个字符串的最长公共子串,可以使用动态规划的方法。
首先,我们可以定义一个二维数组dp来保存每个子问题的结果。dp[i][j]表示以 个字符串的第i个字符和第二个字符串的第j个字符结尾的最长公共子串的长度。
然后,我们需要遍历两个字符串的所有字符,对于每个字符,我们可以进行以下判断:
如果两个字符相等,说明可以构成一个更长的公共子串,即dp[i][j] = dp[i-1][j-1] + 1;
如果两个字符不相等,说明当前字符不属于公共子串,即dp[i][j] = 0;
在遍历过程中,我们需要记录下最长公共子串的长度和对应的索引位置。
最后,根据最长公共子串的长度和索引位置,我们可以从其中一个字符串中截取得到最长公共子串。
下面是一个示例代码实现:
def longest_common_substring(str1, str2):
m = len(str1)
n = len(str2)
dp = [[0] * (n + 1) for _ in range(m + 1)]
max_len = 0
max_end = 0
for i in range(1, m + 1):
for j in range(1, n + 1):
if str1[i - 1] == str2[j - 1]:
dp[i][j] = dp[i - 1][j - 1] + 1
if dp[i][j] > max_len:
max_len = dp[i][j]
max_end = i
return str1[max_end - max_len:max_end]
# 示例调用
str1 = "abcdefg"
str2 = "defghijkl"
print(longest_common_substring(str1, str2))
输出结果为:defgh
这个例子中,最长公共子串为"defgh"。
