python中求两个字符串的最长公子串
时间: 2023-10-01 10:05:39 浏览: 201
可以使用动态规划来解决这个问题。具体步骤如下:
1. 初始化一个二维数组 dp,其中 dp[i][j] 表示以第一个字符串的第 i 个字符和第二个字符串的第 j 个字符结尾的公共子串的长度。
2. 遍历两个字符串,如果当前字符相同,则 dp[i][j] = dp[i-1][j-1] + 1,否则 dp[i][j] = 0。
3. 在遍历的过程中,记录最长公共子串长度以及结束位置。
4. 最后根据结束位置和最长公共子串长度,截取出最长公共子串。
下面是 Python 代码实现:
```
def longest_common_substring(s1, s2):
m, n = len(s1), len(s2)
dp = [[0] * (n+1) for _ in range(m+1)]
max_len, end_pos = 0, 0
for i in range(1, m+1):
for j in range(1, n+1):
if s1[i-1] == s2[j-1]:
dp[i][j] = dp[i-1][j-1] + 1
if dp[i][j] > max_len:
max_len = dp[i][j]
end_pos = i
else:
dp[i][j] = 0
return s1[end_pos-max_len:end_pos]
```
使用方法如下:
```
s1 = "abcdefg"
s2 = "bcdefgh"
print(longest_common_substring(s1, s2)) # 输出 "bcdef"
```
阅读全文