动态规划策略实现最长公共子序列。 最长公共子序列问题:对两个类型相同的序列(输入),用动态规划方法计算他们的最长公共子序列,并输出最长公共子序列的长度值。python
时间: 2023-08-13 20:31:46 浏览: 51
利用动态规划算法解决最长公共子序列问题.doc
好的,下面是Python代码实现最长公共子序列问题的动态规划策略:
```python
def longest_common_subsequence(str1, str2):
m, n = len(str1), len(str2)
dp = [[0] * (n+1) for _ in range(m+1)]
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
else:
dp[i][j] = max(dp[i-1][j], dp[i][j-1])
lcs_len = dp[m][n]
lcs = ''
i, j = m, n
while i > 0 and j > 0:
if str1[i-1] == str2[j-1]:
lcs = str1[i-1] + lcs
i -= 1
j -= 1
elif dp[i-1][j] > dp[i][j-1]:
i -= 1
else:
j -= 1
return lcs_len, lcs
```
该函数返回两个值,第一个是最长公共子序列的长度,第二个是最长公共子序列本身。调用该函数,可以得到两个序列的最长公共子序列及其长度。
阅读全文