寻找最长公共子序列
- 问题描述
- 递归求解
- 非递归求解
1.问题描述
一个给定序列的子序列是在该序列中删去若干元素后得到的序列。若给定序列X={x1,x2,x3,…,xm},则X的子序列是指存在一个严格递增下标序列;例如:序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}.注意(不一定是连续的)
给定两个序列X和Y,当另一序列Z即是X的子序列又是Y的子序列时,称Z是X和Y的公共子序列。
2.递归求解
void PrintVector(vector<vector<int>>& c)
{
for (int i = 0; i < c.size(); i++)
{
for (int j = 0; j < c[j].size(); j++)
{
cout << c[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
int LCSLength(char* X, char* Y, int i, int j,vector<vector<int>> &c,vector<vector<int>> &s)
{
if (i == 0 || j == 0)
{
return 0;
}
else if (c[i][j] > 0)return c[i]