动态规划求解最长公共子序列
时间: 2023-11-13 15:02:13 浏览: 99
动态规划求解最长公共子序列问题
5星 · 资源好评率100%
最长公共子序列问题是指给定两个字符串,求它们的最长公共子序列的长度。动态规划是解决该问题的常用方法。
具体思路如下:
1. 定义状态:dp[i][j]表示第一个字符串前i个字符和第二个字符串前j个字符的最长公共子序列长度。
2. 状态转移方程:
当s1[i-1] == s2[j-1]时,dp[i][j] = dp[i-1][j-1] + 1;
当s1[i-1] != s2[j-1]时,dp[i][j] = max(dp[i-1][j], dp[i][j-1])。
3. 初始状态:dp[j] = dp[i] = 0。
4. 最终结果:dp[m][n],其中m和n分别为两个字符串的长度。
代码实现如下:
```
int longestCommonSubsequence(string text1, string text2) {
int m = text1.size(), n = text2.size();
vector<vector<int>> dp(m+1, vector<int>(n+1, 0));
for(int i=1; i<=m; i++) {
for(int j=1; j<=n; j++) {
if(text1[i-1] == text2[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[m][n];
}
```
阅读全文