#include <cstdlib> #include <iostream> #include <cstring> using namespace std; const int MAX = 100; int c[MAX][MAX] = {{0, 0}}; int b[MAX][MAX] = {{0, 0}}; int LCSLength(char *x, char *y) { int m = strlen(x) - 1; int n = strlen(y) - 1; 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] = 1; } else if(c[i - 1][j] >= c[i][j - 1]) { c[i][j] = c[i - 1][j]; b[i][j] = 2; } else { c[i][j] = c[i][j - 1]; b[i][j] = 3; } } } return c[m][n]; } void LCS(char *a, int i, int j) { if(i == 0 || j == 0) return; if(b[i][j] == 1) { LCS(a, i - 1, j - 1); cout << a[i] << " "; } else if(b[i][j] == 2) LCS(a, i - 1, j); else LCS(a, i, j - 1); } int main(int argc, char *argv[]) { char x[MAX]; char y[MAX]; while(cin >> (x + 1) >> (y + 1)) { cout << "max commen lenght is: " << endl; cout << LCSLength(x, y) << endl; cout << "char is: " << endl; LCS(x, strlen(x) - 1, strlen(y) - 1); cout << endl; } system("PAUSE"); return EXIT_SUCCESS; } 需要注意的是字符串要从数组下标1开始存储...