给定字符串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的最大公共子串。