题目要求:
如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串中,则字符串一称为字符串二的子串。
注意,并不是要求子串(字符串一)的字符必须连续出现在字符串二中。
请编写一个函数,输入两个字符串,求它们的最长公共子序列,并打印出最长公共序列。
例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA、BDAB和BCAB都是它们的最长公共子序列,则输出它们的长度4,并打印任意一个子序列。
题目分析:
参考链接:http://blog.youkuaiyun.com/yysdsyl/article/details/4226630
代码实现:
#include <iostream> using namespace std; #define MAXLEN 100 void LCSLength(char *x, char *y, int m, int n, int c[][MAXLEN], int b[][MAXLEN]) { int i, j; for(i = 0; i <= m; i++) c[i][0] = 0; for(j = 1; j <= n; j++) c[0][j] = 0; for(i = 1; i<= m; i++) { for(j = 1; j <= n; j++) { if(x[i-1] == y[j-1]) { c[i][j] = c[i-1][j-1] + 1; b[i][j] = 0; } 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] = -1; } } } } char Store[MAXLEN] = { 0}; int step = 0; void PrintLCS(int b[][MAXLEN], char *x, int i, int j) {