最长公共子序列
来源:互联网 发布:怎么自学javascript 编辑:程序博客网 时间:2024/05/22 02:00
给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。
说明
最长公共子序列的定义:
- 最长公共子序列问题是在一组序列(通常2个)中找到最长公共子序列(注意:不同于子串,LCS不需要是连续的子串)。该问题是典型的计算机科学问题,是文件差异比较程序的基础,在生物信息学中也有所应用。
- https://en.wikipedia.org/wiki/Longest_common_subsequence_problem
样例
点题:转移方程,如何避免显示的初始化给出"ABCD" 和"EDCA",这个LCS是"A" (或 D或C),返回1
给出 "ABCD" 和"EACB",这个LCS是"AC"返回 2
class Solution {public: /* * @param A: A string * @param B: A string * @return: The length of longest common subsequence of A and B */ int longestCommonSubsequence(string &A, string &B) { // write your code here if (A.size() == 0 || B.size() == 0) { return 0; } vector<vector<int>> dp(A.size() + 1, vector<int>(B.size() + 1, 0)); for (int i = 1; i <= A.size(); i++) { for (int j = 1; j <= B.size(); j++) { if (A[i - 1] == B[j - 1]) { dp[i][j] = dp[i - 1][j - 1] + 1; } else { dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); } } } return dp[A.size()][B.size()]; }};
阅读全文