Longest Common Subsequence — LCS 2D DP

Sanjeev SharmaSanjeev Sharma
1 min read

Advertisement

Problem

Return the length of the longest common subsequence of two strings.

Example: text1="abcde", text2="ace" → 3


Solutions

Python — Space Optimized

class Solution:
    def longestCommonSubsequence(self, text1: str, text2: str) -> int:
        m,n=len(text1),len(text2)
        prev=[0]*(n+1)
        for i in range(1,m+1):
            curr=[0]*(n+1)
            for j in range(1,n+1):
                if text1[i-1]==text2[j-1]: curr[j]=prev[j-1]+1
                else: curr[j]=max(prev[j],curr[j-1])
            prev=curr
        return prev[n]

C++

class Solution {
public:
    int longestCommonSubsequence(string s1, string s2){
        int m=s1.size(),n=s2.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++)
            dp[i][j]=s1[i-1]==s2[j-1]?dp[i-1][j-1]+1:max(dp[i-1][j],dp[i][j-1]);
        return dp[m][n];
    }
};

Java

class Solution {
    public int longestCommonSubsequence(String s1, String s2){
        int m=s1.length(),n=s2.length();
        int[][] dp=new int[m+1][n+1];
        for(int i=1;i<=m;i++) for(int j=1;j<=n;j++)
            dp[i][j]=s1.charAt(i-1)==s2.charAt(j-1)?dp[i-1][j-1]+1:Math.max(dp[i-1][j],dp[i][j-1]);
        return dp[m][n];
    }
}

Complexity

  • Time: O(m*n) | Space: O(n) optimized

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro