编程实现查找两个字符串的最长公共子序列
时间: 2023-12-28 12:03:26 浏览: 73
你可以使用动态规划来实现查找两个字符串的最长公共子序列。
首先,假设有两个字符串s1和s2,长度分别为n和m。我们可以定义一个二维数组dp,其中dp[i][j]表示以s1的前i个字符和s2的前j个字符为结尾的最长公共子序列的长度。
然后,我们可以使用以下递推公式来计算dp数组的值:
- 当s1[i]等于s2[j]时,dp[i][j] = dp[i-1][j-1] + 1,表示当前字符相等,最长公共子序列长度加1。
- 当s1[i]不等于s2[j]时,dp[i][j] = max(dp[i-1][j], dp[i][j-1]),表示当前字符不相等,取左边或上边的最大值。
最后,通过遍历整个dp数组,即可得到最长公共子序列的长度。
以下是一个示例的Python代码实现:
```python
def longest_common_subsequence(s1, s2):
n, m = len(s1), len(s2)
dp = [[0] * (m+1) for _ in range(n+1)]
for i in range(1, n+1):
for j in range(1, m+1):
if s1[i-1] == s2[j-1]:
dp[i][j] = dp[i-1][j-1] + 1
else:
dp[i][j] = max(dp[i-1][j], dp[i][j-1])
return dp[n][m]
```
你可以调用 `longest_common_subsequence` 函数,并传入两个字符串作为参数,即可获得最长公共子序列的长度。
阅读全文