频道栏目
首页 > 资讯 > 其他 > 正文

最长公共子序列LCS

17-08-28        来源:[db:作者]  
收藏   我要投稿

20170828_最长公共子序列 LCS

 

//最长公共子序列LCS
/*
请编写一个函数,输入两个字符串,求它们最长公共子序列。例如:
ABCBDAB和BDCABA,字符序列BCBA和BDAB都是它们的最长公共子序列,则输出4
*/
/*很明显,这是动态规划问题:DP问题
1、假设序列分别是:X=< X0,X1,X2, ... ,Xm-1,Xm >   Y=< Y0,Y1,Y2, ... ,Yn-1,Yn >
它的一个最长公共子序列是:Z=< Z0,Z1,Z2, ... ,Zk >
2、当Xm=Yn时,LCS(Xm,Yn)= LCS(Xm-1,Yn-1)+1
当Xm!=Yn时,LCS(Xm,Yn)= max(LCS(Xm-1,Yn),LCS(Xm,Yn-1))
3、显然,当X或Y为空时,LCS长度是为零。
*/
#include
#include
#include
#include
#include
#include
using namespace std;

class Solution
{
public:
	void GetLCS(const string &strA, const string &strB)
	{
		int n=strA.size();
		int m=strB.size();
		if(n==0 || n==0)
		{
			cout<<0<> dp(n+1,vector(m+1,0));
		//按照状态转移方程,填充表格
		for(int i=1; i<=n; ++i)
		{
			for(int j=1; j<=m; ++j)
			{
				if(strA[i-1]==strB[j-1])
					dp[i][j]=dp[i-1][j-1]+1;
				else
					dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
			}
		}
		cout<<>>strA>>strB)
	{
		cout<
相关TAG标签
上一篇:PYthon正则表达式设定大小写匹配
下一篇:新手学Scrapy大坑之win32api及dllloadfailed
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站