最长公共子序列
我的代码:
写的依托答辩,
老师给的答案
cin >> (s + 1); // 读取字符串s,存储在s+1的位置,s[0]不使用
cin >> (t + 1); // 读取字符串t,存储在t+1的位置,t[0]不使用
只能硬记qwq
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 10; // 最大长度为1000+10
int dp[maxn][maxn]; // 动态规划数组
char s[maxn], t[maxn]; // 两个字符串
int main() {
// 读取输入的两个字符串,索引从1开始
cin >> (s + 1); // 读取字符串s,存储在s+1的位置,s[0]不使用
cin >> (t + 1); // 读取字符串t,存储在t+1的位置,t[0]不使用
int n = strlen(s + 1); // 字符串s的长度
int m = strlen(t + 1); // 字符串t的长度
// 使用动态规划计算LCS
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (s[i] == t[j]) { // 如果两个字符相等
dp[i][j] = dp[i - 1][j - 1] + 1; // LCS长度加1
} else { // 如果两个字符不相等
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); // 取上或左中的较大者
}
}
}
// 输出LCS的长度
cout << dp[n][m] << endl;
return 0;
}