1. 问题
2. 解析
3. 设计
代码:
void f(int B[][MAX],int i,int j) {
if (i == 0 || j == 0) {
return;
}
if (B[i][j] == 2) {
f(B, i - 1, j-1);
printf("%c ", X[i]);
}
else if (B[i][j] == 1) {
f(B, i - 1, j);
}
else {
f(B, i, j-1);
}
}
void LCS(char X[],int m,char Y[],int n,int C[][MAX],int B[][MAX]) {
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= n; ++j) {
if (X[i] == Y[j]) {
C[i][j] = C[i - 1][j - 1] + 1;
B[i][j] = 2;//2表示删除两个,1表示删除x,0表示删除y
}
else
{
if (C[i - 1][j] > C[i][j - 1])
{
C[i][j] = C[i - 1][j];
B[i][j] = 1;
}
else {
C[i][j] = C[i][j - 1];
B[i][j] = 0;
}
}
}
}
f(B, m, n);
}
4. 示例
5. 分析
复杂度为O(mn)
6. 源码
https://github.com/LonelyTaker/Algorithm-analysis