解题思路
2024-05-20 22:42:59
发布于:上海
43阅读
0回复
0点赞
我们可以使用一个二维数组 dp 来存储 X 和 Y 的公共子序列的长度。dp[i][j] 表示 X 的前 i 个元素和 Y 的前 j 个元素的公共子序列的长度。
首先初始化一个二维数组 dp,并将所有元素设置为 0。然后,我们使用两个循环来计算 dp[i][j] 的值。如果 X 的第 i 个元素和 Y 的第 j 个元素相同,我们将 dp[i][j] 设置为 dp[i - 1][j - 1] + 1,否则我们将 dp[i][j] 设置为 max(dp[i - 1][j], dp[i][j - 1])。最后,我们输出 dp[m][n],即 X 和 Y 的最长公共子序列的长度。
#include <iostream>
#include <string>
using namespace std;
int main() {
string X, Y;
cin >> X >> Y;
int m = X.size(), n = Y.size();
int dp[m + 1][n + 1];
for (int i = 0; i <= m; i++) {
for (int j = 0; j <= n; j++) {
dp[i][j] = 0;
}
}
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (X[i - 1] == Y[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[m][n] << endl;
return 0;
}
这里空空如也
有帮助,赞一个