public class Solution {
public int LCS(String s1,String s2){
if(s1==null||s2==null){
return 0;
}
return generateLCS(s1,s2,s1.length()-1,s2.length()-1);
}
private int generateLCS(String s1,String s2,int m,int n){
if(m<0||n<0){
return 0;
}
int res=0;
int memo[][] = new int[m+1][n+1];
if(memo[m][n]!=0){
return memo[m][n];
}
if(s1.charAt(m)==s2.charAt(n)){
res=1+generateLCS(s1,s2,m-1,n-1);
memo[m][n]=res;
}else{
return Math.max(generateLCS(s1,s2,m-1,n),generateLCS(s1,s2,m,n-1));
}
return memo[m][n];
}
public static void main(String[] args) {
System.out.println(new Solution().LCS("ABCDZ","AEBDZ"));
}
}