欢迎访问宙启技术站
智能推送

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"。