1. 程式人生 > >Longest Common Subsequence

Longest Common Subsequence

pan ane post lis enc panel write amp sta

Problem statement:

Given two strings, find the longest common subsequence (LCS).

Your code should return the length of LCS.

Have you met this question in a real interview? Yes Clarification

What‘s the definition of Longest Common Subsequence?

  • https://en.wikipedia.org/wiki/Longest_common_subsequence_problem
  • http://baike.baidu.com/view/2020307.htm
Example

For "ABCD" and "EDCA", the LCS is "A" (or "D", "C"), return 1.

For "ABCD" and "EACB", the LCS is "AC", return 2.

Solution:

This is a DP problem for two sequences. Such as 72. Edit Distance and 583. Delete Operation for Two Strings.

The key points is also dp[i][j] means the LCS of first i chars in A and first j char in B, and return dp[m][n]

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
        int m = A.size();
        int n = B.size();
        vector
<vector<int>> dp(m + 1, vector<int>(n + 1, 0)); for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; 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[m][n]; } };

Longest Common Subsequence