pytuon中输出两个字符串的最长公共子串
时间: 2023-12-13 07:04:10 浏览: 77
求两个字符串的最长公共字串
可以使用动态规划的方法来解决这个问题。
首先创建一个二维数组 `dp`,其中 `dp[i][j]` 表示以字符串 `1` 中第 `i` 个字符、字符串 `2` 中第 `j` 个字符结尾的最长公共子串的长度。
然后遍历字符串 `1` 和字符串 `2` 中的所有字符,如果当前字符相同,则有:
```
dp[i][j] = dp[i-1][j-1] + 1
```
如果当前字符不同,则有:
```
dp[i][j] = 0
```
遍历过程中,记录最长的公共子串长度 `max_len` 和对应的结束位置 `end_pos`,即:
```
if dp[i][j] > max_len:
max_len = dp[i][j]
end_pos = i
```
最后,最长公共子串即为字符串 `1` 中以 `end_pos` 结尾的 `max_len` 个字符。
下面是完整的代码实现:
```python
def lcs(str1, str2):
m, n = len(str1), len(str2)
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 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_pos = i
else:
dp[i][j] = 0
return str1[end_pos-max_len:end_pos]
```
可以使用以下代码进行测试:
```python
s1 = 'abcdefg'
s2 = 'ababcdf'
print(lcs(s1, s2)) # 输出 'abcd'
```
阅读全文