python 找到两个字符串的最长公共子串
时间: 2023-10-31 10:04:37 浏览: 130
python实现求两个字符串的最长公共子串方法
可以使用动态规划(DP)的思想来解决这个问题。具体步骤如下:
1. 定义一个二维数组dp,其中dp[i][j]表示以第一个字符串中第i个字符和第二个字符串中第j个字符作为结尾的最长公共子串的长度。
2. 初始化dp数组的第一行和第一列为0,即dp[i][0]和dp[0][j]均为0。
3. 遍历两个字符串中的每一个字符,如果两个字符相同,则dp[i][j] = dp[i-1][j-1] + 1,否则dp[i][j] = 0。
4. 在遍历的过程中,记录下最大的dp[i][j],以及对应的位置i和j。
5. 最长公共子串的长度即为最大的dp[i][j],最长公共子串可以通过截取任意一个字符串中从i-dp[i][j]到i的子串得到。
下面是Python代码实现:
```
def find_longest_common_substring(str1, str2):
len1 = len(str1)
len2 = len(str2)
dp = [[0 for j in range(len2+1)] for i in range(len1+1)]
max_len = 0
max_i = 0
max_j = 0
for i in range(1, len1+1):
for j in range(1, len2+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]
max_i = i
max_j = j
else:
dp[i][j] = 0
return str1[max_i-max_len:max_i]
# 测试
str1 = "abcdefg"
str2 = "cdefgh"
print(find_longest_common_substring(str1, str2))
# 输出:cdefg
```
阅读全文