实现两个字符串的最长公共子序列和最长公共子串的输出。
时间: 2024-10-14 18:02:26 浏览: 35
实现两个字符串的最长公共子序列(Longest Common Subsequence, LCS)通常涉及到动态规划算法。最长公共子序列是指在两个序列中都出现的最长连续字符序列,但它不必连续。例如,"ABCDGH" 和 "AEDFHR" 的最长公共子序列是 "ADH"。
对于最长公共子串(Longest CommonSubstring, LCS),它则是指在两个字符串中都出现的最长连续字符子串。在这个例子中,"ADH" 也是最长公共子串。
以下是Python中计算LCS的一种常见动态规划实现方法:
```python
def lcs(s1, s2):
m = len(s1)
n = len(s2)
dp = [[0] * (n+1) for _ in range(m+1)]
max_len = 0
end_index = 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_index = i - 1
return s1[end_index-max_len+1:end_index+1], max_len
s1 = "ABCBDAB"
s2 = "BDCABA"
lcs_str, lcs_len = lcs(s1, s2)
print(f"最长公共子串:{lcs_str}")
print(f"长度:{lcs_len}")
```
对于最长公共子序列,虽然也有类似的方法,但由于允许不连续,实现起来更复杂一些,一般也会涉及动态规划。但结果通常不会像子串那样直接返回,而是返回一个表示子序列的索引列表。
阅读全文