def lcs(text1,text2):
m,n=len(text1),len(text2)
dp=[[0]*(n+1) for _ in range(m+1)]
for i in range(1,m+1):
for j in range(1,n+1):
if text1[i-1]==text2[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]
public int longestCommonSubsequence(String t1,String t2){
int m=t1.length(),n=t2.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]=t1.charAt(i-1)==t2.charAt(j-1)?dp[i-1][j-1]+1:Math.max(dp[i-1][j],dp[i][j-1]);
return dp[m][n];
}
2D DP. Python list comprehension vs Java 2D array. charAt() vs indexing.
def lcs(text1,text2):
m,n=len(text1),len(text2)
dp=[[0]*(n+1) for _ in range(m+1)]
for i in range(1,m+1):
for j in range(1,n+1):
if text1[i-1]==text2[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]
public int longestCommonSubsequence(String t1,String t2){
int m=t1.length(),n=t2.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]=t1.charAt(i-1)==t2.charAt(j-1)?dp[i-1][j-1]+1:Math.max(dp[i-1][j],dp[i][j-1]);
return dp[m][n];
}
1. 2D table 2. Match: diagonal+1 3. Mismatch: max of top/left