最长公共子序列的问题

来源:互联网 发布:apm调参软件 编辑:程序博客网 时间:2024/06/05 10:04

动态规划

      既然是经典的题目肯定是有优化空间的,并且解题方式是有固定流程的,这里我们采用的是矩阵实现,也就是二维数组。

第一步:先计算最长公共子序列的长度。

第二步:根据长度,然后通过回溯求出最长公共子序列。

现有两个序列X={x1,x2,x3,...xi},Y={y1,y2,y3,....,yi},

设一个C[i,j]: 保存Xi与Yj的LCS的长度。

递推方程为:


#include "stdafx.h"#include<string>using namespace std;int Finsubstring(string A,string B){int An = A.size();int Bn = B.size();int **S=new int*[An];for (int i = 0; i <= An; i++)S[i] = new int[Bn+1];for (int i = 0; i <= An;i++)for (int j = 0; j <= Bn; j++){if (i == 0 || j == 0)S[i][j] = 0;if (A[i] == B[j]&&i>0&&j>0)S[i][j] = S[i-1][j-1] + 1;if (A[i] != B[j] && i>0 && j>0)S[i][j] = S[i][j - 1]>S[i - 1][j] ? S[i][j - 1] : S[i - 1][j];}return S[An][Bn];}int main(){string A="cnblogs";string B="belong";int result = Finsubstring(A, B);printf("%d",result);return 0;}


原创粉丝点击