文章
150
粉丝
0
获赞
558
访问
23.2k
#include <bits/stdc++.h>
using namespace std;
int main() {
string s1, s2, s3;
while (cin >> s1 >> s2 >> s3) {
int n1 = s1.length(), n2 = s2.length(), n3 = s3.length();
// dp[i][j][k] = 三维LCS长度
vector<vector<vector<int>>> dp(n1 + 1, vector<vector<int>>(n2 + 1, vector<int>(n3 + 1, 0)));
for (int i = 1; i <= n1; i++) {
for (int j = 1; j <= n2; j++) {
for (int k = 1; k <= n3; k++) {
if (s1[i-1] == s2[j-1] && s2[j-1] == s3[k-1]) {
dp[i][j][k] = dp[i-1][j-1][k-1] + 1;
} else {
dp[i][j][k] = max({dp[i-1][j][k], dp[i][j-1][k], dp[i][j][k-1]});
}
}
}
}
// 回溯找LCS(逆序)
string lcs;
int i = n1, j = n2, k = n3;
while (i ...
登录后发布评论
暂无评论,来抢沙发