Longest Common Subsequence — LCS 2D DP
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
← Previous
Edit Distance — Wagner-Fischer DP