如何用Python求2个字符串的最长公共子串
时间: 2024-05-07 08:23:32 浏览: 77
可以使用动态规划的思想来解决这个问题。具体步骤如下:
1. 构建一个二维数组dp,其中dp[i][j]表示以第一个字符串中第i个字符和第二个字符串中第j个字符为结尾的字符串的最长公共子串长度。
2. 初始化dp数组,将所有元素都赋为0。
3. 遍历两个字符串,如果第一个字符串中第i个字符和第二个字符串中第j个字符相等,则dp[i][j] = dp[i-1][j-1] + 1,表示当前字符可以加入到之前的子串中。
4. 如果不相等,则dp[i][j] = 0,表示当前字符不能加入到之前的子串中,需要重新开始。
5. 在遍历过程中记录最长的dp[i][j],以及对应的子串。
下面是Python代码实现:
```python
def longest_common_substring(str1, str2):
m, n = len(str1), len(str2)
dp = [[0] * (n+1) for _ in range(m+1)]
max_len, end = 0, 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]
end = i
else:
dp[i][j] = 0
return str1[end-max_len:end], max_len
```
使用示例:
```python
str1 = 'abcdefg'
str2 = 'cdehijk'
print(longest_common_substring(str1, str2)) # ('cde', 3)
```
阅读全文