跳到主要内容

给定字符串A和B,输出A和B中的最大公共子串 ?

参考答案:

这是一个经典的动态规划问题,我们可以使用动态规划的方法来解决这个问题。下面是一个Python的解决方案:

def longest_common_substring(A, B):
    m = [[0] * (1 + len(B)) for i in range(1 + len(A))]
    longest, x_longest = 0, 0
    for x in range(1, 1 + len(A)):
        for y in range(1, 1 + len(B)):
            if A[x - 1] == B[y - 1]:
                m[x][y] = m[x - 1][y - 1] + 1
                if m[x][y] > longest:
                    longest = m[x][y]
                    x_longest = x
            else:
                m[x][y] = 0
    return A[x_longest - longest: x_longest]

# 测试
A = "ABCDEFG"
B = "XYZABCDEFGZ"
print(longest_common_substring(A, B))  # 输出: "ABCDEFG"

在这个解决方案中,我们首先创建一个二维数组m,其中m[i][j]表示以A[i-1]B[j-1]结尾的字符串的最长公共后缀的长度。然后我们遍历AB,如果A[i-1]等于B[j-1],那么m[i][j]就等于m[i-1][j-1] + 1,否则m[i][j]就等于0。同时,我们还跟踪最长公共后缀的长度longest和它在A中的起始位置x_longest。最后,我们返回从A[x_longest - longest]A[x_longest - 1]的子串,这就是AB的最大公共子串。