具体思想可以参考这篇文章,很详细。(https://blog.csdn.net/hrn1216/article/details/51534607)
#include<iostream>
#include<string.h>
using namespace std;
/*给定两个序列X,Y,当另一个序列Z既是X的子序列也是Y的子序列时,称Z为X,Y的公共子序列。
求一个最长的公共子序列。*/
/*输入两个序列,X,Y,作为输入,输出两个数组c和b,c[i][j]存储Xi和Yj的最长公共子序列的长度,b[i][j]记录c[i][j]的值是由哪一个子问题的解得到的,这在构造最长公共子序列时要用到*/
void LCSLength(int m, int n, char *x,char *y, int **c, int **b)
{
int i, j;
for (i = 1; 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] = 1;
}
else if (c[i - 1][j] >= c[i][j - 1])
{
c