Fyn_Andersen通过本文主要向大家介绍了最长公共子序列等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
Input示例
abcicba abdkscab
Output示例
abca
#include <iostream> #include <cstring> using namespace std; int c[1001][1001], b[1001][1001]; void LSC(int n, int m, string x, string y) { int i, j; for(i = 0; i <= n; i++) c[i][0] = 0; for(j = 0; j <= m; j++) c[0][j] = 0; for(i = 1; i <= n; i++) { for(j = 1; j <= m; j++) { if(x[i-1] == y[j-1]) { c[i][j] = c[i-1][j-1] + 1; b[i-1][j-1] = 0; } else { if(c[i-1][j] >= c[i][j-1]) { c[i][j] = c[i-1][j]; b[i-1][j-1] = 1; } else{ c[i][j] = c[i][j-1]; b[i-1][j-1] = -1; } } } } } void S_LSC(string x, int i, int j) { if(i == 0 || j == 0) return; if(b[i-1][j-1] == 0) { S_LSC(x, i-1, j-1); cout << x[i-1]; } if(b[i-1][j-1] == 1) { S_LSC(x, i-1, j); } if(b[i-1][j-1] == -1) { S_LSC(x, i, j-1); } } int main() { string x, y; int n, m; cin >> x >> y; n = x.length(); m = y.length(); LSC(n, m, x, y); S_LSC(x, n, m); return 0; }