最长公共子序列问题cpp代码
时间: 2023-12-20 15:54:00 浏览: 89
最长公共子序列问题代码
下面是最长公共子序列问题的 C++ 代码实现,采用动态规划思想:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 1005;
int dp[MAXN][MAXN]; // dp[i][j]表示s1[1...i]与s2[1...j]的最长公共子序列的长度
int main() {
string s1, s2;
cin >> s1 >> s2;
int len1 = s1.length(), len2 = s2.length();
memset(dp, 0, sizeof(dp)); // 初始化
for (int i = 1; i <= len1; i++) {
for (int j = 1; j <= len2; j++) {
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]);
}
}
}
cout << dp[len1][len2] << endl; // 输出最长公共子序列的长度
return 0;
}
```
以上代码的时间复杂度为 $O(len1 \times len2)$,其中 $len1$ 和 $len2$ 分别是两个字符串的长度。
阅读全文