给定字符串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]
结尾的字符串的最长公共后缀的长度。然后我们遍历A
和B
,如果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]
的子串,这就是A
和B
的最大公共子串。