求string1和sring2的最长公共子序列;
如果采用递归算法存在大量重复,浪费资源空间,算法复杂度为指数;
故采用似拙实巧的递归算法,核心是添加了一组初始化为0的行列
如果能让c++填充这样一个二维数组,数组的最后一个元素当然就是最长的公共子序列的字节数了
其中黄色填充的为干扰元素(如果结果黄色得出子序列为eo明显不是最长)
为排除这一干扰,采取如果str1[i-1]==str2[j-1],则ar[i][j]为左上角的数加一
不相等则取这个数的左边和上面的俩个数中最大的数位来保持计数
以上思路得到代码
#include<algorithm>
#include<iostream>
#include<string>
using namespace std;
int LCS(string &str1,