LintCode Longest Common Subsequence(最长公共子序列长度,动态规划入门题)
2017-09-10 15:25
453 查看
题目Link:http://www.lintcode.com/en/problem/longest-common-subsequence/
递推公式:
以上是AC代码,至于怎么得到最长公共子序列,可以从chess[lenA][lenB]开始回溯(Traceback),得到LCS。
递推公式:
#include <iostream> #include <cstring> using namespace std; class Solution { public: /** * @param A, B: Two strings. * @return: The length of longest common subsequence of A and B. */ int longestCommonSubsequence(string A, string B) { // write your code here //得出两个字符串的长度,如果长度为0直接返回0 int lenA = A.length(); int lenB = B.length(); if(lenA == 0 && lenA == lenB) return 0; //再字符串头添加空位,方便之后编码从1开始 A = " " + A; B = " " + B; int chess[lenA + 1][lenB + 1]; //将表中所有元素置为0 memset(chess, 0, sizeof(int) * lenA * lenB); for (int i = 1; i <= lenA; i++) { for (int j = 1; j <= lenB; j++) { //当两个字符串中 A[i] == A[j], // 则最长LCS = LCS{(A[i - 1], A[j- 1])} + 1 //否则就在LCS{(A[i - 1], A[j])},和 LCS{(A[i], A[j- 1])}中选最长的那个 //这里的A[i],A[j]均指的是字符串 if (A[i] == B[j]) { chess[i][j] = chess[i - 1][j - 1] + 1; } else { chess[i][j] = max(chess[i - 1][j], chess[i][j - 1]); } } } return chess[lenA][lenB]; } }; int main() { Solution slo; string str1 = ""; string str2 = ""; cout << slo.longestCommonSubsequence(str1, str2) << endl; return 0; }
以上是AC代码,至于怎么得到最长公共子序列,可以从chess[lenA][lenB]开始回溯(Traceback),得到LCS。
相关文章推荐
- lintcode longest-common-subsequence 最长公共子序列 证明
- 动态规划入门——Common Subsequence(最长公共子序列)
- Dynamic Programming longest common subsequence(LCS) 动态规划之最长公共子序列
- Lintcode: Longest Common Subsequence
- 【算法导论学习-29】动态规划经典问题02:最长公共子序列问题(Longest common subsequence,LCS)
- 最长公共子序列(longest common subsequence) 动态规划
- 动态规划 (Dynamic Programming) 之 最长公共子序列(Longest Common Subsequence)
- 【算法导论学习-29】动态规划经典问题02:最长公共子序列问题(Longest common subsequence,LCS)
- Lintcode - Longest common subsequence
- 【LeetCode】Longest Common Subsequence最长公共子序列(求出某一解+LCS长度) - Medium
- 最长公共子序列的长度 Length of Longest common subsequence
- [动态规划-2] 最长公共子序列-Longest Common Subsequence
- 动态规划解最长公共子序列问题LCS(longest common subsequence)
- LintCode Longest Common Subsequence
- [动态规划] [LCS算法] 最长公共子序列 longest common subsequence
- 转载 动态规划 (Dynamic Programming) 之 最长公共子序列(Longest Common Subsequence)
- 最长公共子序列(Longest-Common-Subsequence,LCS)
- 第十一章 ALDS1_10_C:Longest Common Subsequence 最长公共子序列
- [算法]最长公共子序列--LCS(Longest Common Subsequence)
- HDU 1159 Common Subsequence --- DP入门之最长公共子序列