package com.interview.dynamic; /** http://www.geeksforgeeks.org/dynamic-programming-set-4-longest-common-subsequence/ */ public class LongestCommonSubsequence { public int lcs(char str1[],char str2[],int len1, int len2){ if(len1 == str1.length || len2 == str2.length){ return 0; } if(str1[len1] == str2[len2]){ return 1 + lcs(str1,str2,len1+1,len2+1); } else{ return Math.max(lcs(str1,str2,len1+1,len2),lcs(str1,str2,len1,len2+1)); } } public int lcsDynamic(char str1[],char str2[]){ int temp[][] = new int[str1.length + 1][str2.length + 1]; int max = 0; for(int i=1; i < temp.length; i++){ for(int j=1; j < temp[i].length; j++){ if(str1[i-1] == str2[j-1]) { temp[i][j] = temp[i - 1][j - 1] + 1; } else { temp[i][j] = Math.max(temp[i][j-1],temp[i-1][j]); } if(temp[i][j] > max){ max = temp[i][j]; } } } return max; } public static void main(String args[]){ LongestCommonSubsequence lcs = new LongestCommonSubsequence(); String str1 = "ABCDGHLQR"; String str2 = "AEDPHR"; int result = lcs.lcsDynamic(str1.toCharArray(), str2.toCharArray()); System.out.print(result); } }