最长公共子序列,Longest-Common-Subsequence(LCS)
来源:互联网 发布:算法第四版中文电子书 编辑:程序博客网 时间:2024/06/07 10:46
公共子序列有别于公共子串,子序列可以不连续,如 X = [abcbdab], Y = [bdcaba],则 bcba 为其一个公共最长子序列。同样考虑DP方案,假设 X = <x1, x2, ..., xm>, Y = <y1, y2, ..., yn> ,LCS(X, Y) 表示二者的公共最长子序列,则有
- 如果 xm == yn,则 LCS(X, Y) = xm + LCS(Xm-1, Yn-1);
- 如果 xm != yn,则 LCS(X, Y) = max{LCS(Xm-1, Y), LCS(X, Yn-1)};
于是LCS问题具有重叠子问题性质。
#include <iostream>#include <vector>#include <string>using namespace std;#define INF (~(1<<31))int main(){string s1, s2;cin >> s1 >> s2;int len1 = (int)s1.size(), len2 = (int)s2.size();vector<vector<int>> mat(len1+1, vector<int>(len2+1, 0));for(int i = 1; i <= len1; ++i){for(int j = 1; j <= len2; ++j){if(s1[i-1] == s2[j-1]){mat[i][j] = mat[i-1][j-1] + 1;}else if(mat[i-1][j] > mat[i][j-1]){mat[i][j] = mat[i-1][j];}else{mat[i][j] = mat[i][j-1];}}}string outs;int i = len1, j = len2;while(i && j){if(s1[i-1] == s2[j-1]){outs = s1[i-1] + outs;--i; --j;}else if(mat[i-1][j] > mat[i][j-1]){--i;}else{--j;}}cout << mat[len1][len2] << ": " << outs;return 0;}
0 0
- 最长公共子序列(Longest Common Subsequence LCS)
- uva 10405 Longest Common Subsequence 最长公共子序列 LCS
- 最长公共子序列(LCS, Longest Common Subsequence), POJ 1458
- 求最长公共子序列Longest Common Subsequence LCS
- 最长公共子序列(Longest-Common-Subsequence,LCS)
- 最长公共子序列问题LCS Longest Common Subsequence
- uva10405 - Longest Common Subsequence(LCS,最长公共子序列)
- 最长公共子序列(Longest Common Subsequence, LCS)
- 最长公共子序列(Longest Common Subsequence,LCS)
- 最长公共子序列,Longest-Common-Subsequence(LCS)
- 最长公共子序列LCS(The longest common subsequence)
- 最长公共子序列问题(LCS) Longest common subsequence
- 最长公共子序列问题(Longest common subsequence,LCS)
- LCS(Longest Common Subsequence 最长公共子序列)
- 最长公共子序列问题(LCS, Longest Common Subsequence)
- 最长公共子序列与最长公共子串(Longest Common Subsequence, LCS)
- 最长公共子序列Longest Common Subsequence
- 最长公共子序列 (longest common subsequence)
- java笔记--设计模式之模版方法模式
- 【java基础】集合类及其数据结构回忆总结
- 最大子序列和问题
- 01背包问题
- C++ 中的类型转换函数
- 最长公共子序列,Longest-Common-Subsequence(LCS)
- Code Snippets的使用
- spring切面编程
- MySQL表结构优化、数据类型选择方法
- 算法类思考累积(一)
- Android四大组件之一广播
- OC语言BLOCK和协议
- VS2015缺少stdio.h等头文件的解决方案
- 一个单机棋盘式半即时解谜RPG的开发与反思、2