编程之美3.3——类似——两个字符串的最长公共子序列(LCS)
来源:互联网 发布:手机淘宝评价管理 编辑:程序博客网 时间:2024/06/06 19:01
#include <iostream> #include <algorithm> #include <string> using namespace std; #define MAXN 10001 char A[MAXN]; char B[MAXN]; int dp[MAXN][MAXN]; // 设Z为A和B的最长公共子序列,dp[i][j]表示A从位置i开始的后缀与 // B从位置j开始的后缀的最长公共子序列Z从位置k开始的后缀的长度 void fun1(){cin>>A>>B; int i, j, m, n; n = strlen(A); m = strlen(B); // 初始化,若一个序列为空,则最长子序列肯定为0 for (i=0; i<=n; i++) dp[i][m] = 0; for (j=0; j<=m; j++) dp[n][j] = 0; for(i=n-1; i>=0; i--) for(j=m-1; j>=0; j--) { if (A[i] == B[j]) // 若相等,则zk=Ai=Bj且A从位置i+1开始的后缀与B从位置j+1开始的后缀 // 的最长公共子序列是Z从位置k+1开始的后缀 dp[i][j]=dp[i+1][j+1]+1; else // 若不相等,则取两个最长公共子序列中长度较大的那个 dp[i][j]=max(dp[i][j+1], dp[i+1][j]); } for(i=0;i<=n;i++) { for(j=0;j<=m;j++) printf("%d ",dp[i][j]); printf("\n"); } printf("%d\n", dp[0][0]); }int CalculateLcs(string s1,int p1E,string s2,int p2E){if(p1E<0||p2E<0)return 0;if(s1[p1E]==s2[p2E]){return CalculateLcs(s1,p1E-1,s2,p2E-1)+1;}else{return max(CalculateLcs(s1,p1E,s2,p2E-1),CalculateLcs(s1,p1E-1,s2,p2E));}}string Lcs(string s1,int p1E,string s2,int p2E){if(p1E<0||p2E<0)return "";if(s1[p1E]==s2[p2E]){return Lcs(s1,p1E-1,s2,p2E-1)+s1[p1E];}else{string str1 = Lcs(s1,p1E,s2,p2E-1);string str2 = Lcs(s1,p1E-1,s2,p2E);return (str1.length()>str2.length())?str1:str2;}}int main() { string s1,s2;cin>>s1>>s2;//计算最长公共子序列长度cout<<CalculateLcs(s1,s1.length()-1,s2,s2.length()-1)<<endl;//计算最长公共子序列cout<<Lcs(s1,s1.length()-1,s2,s2.length()-1);return 0;}参考:http://blog.csdn.net/linyunzju/article/details/7747718
0 0
- 编程之美3.3——类似——两个字符串的最长公共子序列(LCS)
- lCS——最长公共子序列
- 最长公共子序列——LCS
- 求两字符串最长公共子序列LCS的应用—删除字符串的字符剩下回文串
- 动态规划——最长公共子序列(LCS)
- 动态规划——最长公共子序列(LCS)
- 求最长公共子序列——LCS
- 最长公共子序列问题——LCS
- 动态规划——最长公共子序列问题(LCS)
- ACM模板——最长公共子序列 LCS
- 动态规划——最长公共子序列LCS
- Algorithm3——最长公共子序列(LCS)
- 动态规划—最长公共子序列LCS
- 算法分析—最长公共子序列(LCS)
- LCS—记录,回溯输出最长公共子序列
- DP—求最长公共子序列LCS(代码)
- 算法12—动态规划算法之:最长公共子序列 & 最长公共子串(LCS)
- 给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。C实现
- CART分类与回归树的原理与实现
- Assembling Features Reading Features
- IOS中自动布局autoresizing
- 删除链表中的重复节点、剩余节点逆序输出
- CodeForces 514D R2D2 and Droid Army
- 编程之美3.3——类似——两个字符串的最长公共子序列(LCS)
- 【树形dp】Codeforces 238C World Eater Brothers
- zoj 3601 Unrequited Love(STL,灵活题)
- Python学习笔记
- 二叉查找树
- mongoose 实现DBRef查找所有子类信息
- 学习使用Git和远程代码库,已亲自试用,非常好
- 走进微信的神奇世界--数据的发送和接收
- 数字图像处理的研究方法