/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
char[] s1= "ABCDGH".toCharArray();
char[] s2="AEDFHR".toCharArray();
int lcs_length=naive(s1,s2,s1.length,s2.length,ans);
System.
out.
println("LCS length(Using Recursion) = "+lcs_length
);
LCS_DP(s1,s2);
}
public static int naive
(char[] s1,
char[] s2,
int l1,
int l2,
String s
) {
if(l1==0 || l2==0)
{
return 0;
}
if(s1[l1-1]==s2[l2-1])
{
// System.out.println(l1+" "+l2+" "+s1[l1]+ " check 2");
s=s1[l1-1]+s;
return naive(s1,s2,l1-1,l2-1,s)+1;
}
else
{
int f1=naive(s1, s2, l1, l2-1,s);
int f2=naive(s1, s2, l1-1, l2,s);
}
}
public static void LCS_DP(char[] s1,char[] s2)
{
if(s1.length==0 || s2.length==0)
return ;
int l1=s1.length,l2=s2.length;
int m[][]=new int[l1+1][l2+1];
int i,j;
System.
out.
print("LCS String = "); for(i=0;i<=l1;i++)
{
for(j=0;j<=l2;j++)
{
if(i==0 || j==0)
{
m[i][j]=0;
}
else
{
if(s1[i-1]==s2[j-1] )
{
m[i][j]=m[i-1][j-1]+1;
}
else
{
m
[i
][j
]=Math.
max(m
[i
][j
-1],m
[i
-1][j
]); }
}
}
}
System.
out.
println("\nLength (Using DP) = "+m
[l1
][l2
]); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCSBjaGFyW10gczE9ICJBQkNER0giLnRvQ2hhckFycmF5KCk7CiAgICAgIGNoYXJbXSBzMj0iQUVERkhSIi50b0NoYXJBcnJheSgpOwogICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuczEgPSAiK0FycmF5cy50b1N0cmluZyhzMSkpOwogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiczIgPSAiK0FycmF5cy50b1N0cmluZyhzMikpOwogICAgIAogICAgIAogICAgICBTdHJpbmcgYW5zPSIiOwogICAgIGludCBsY3NfbGVuZ3RoPW5haXZlKHMxLHMyLHMxLmxlbmd0aCxzMi5sZW5ndGgsYW5zKTsKICAgIAogICAgIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxDUyBsZW5ndGgoVXNpbmcgUmVjdXJzaW9uKSA9ICIrbGNzX2xlbmd0aCk7CiAgCiAgICBMQ1NfRFAoczEsczIpOwoJfQoJcHVibGljIHN0YXRpYyBpbnQgbmFpdmUoY2hhcltdIHMxLGNoYXJbXSBzMixpbnQgbDEsaW50IGwyLFN0cmluZyBzKQogICAgewogICAgICAgCiAgICAgICAgaWYobDE9PTAgfHwgbDI9PTApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYoczFbbDEtMV09PXMyW2wyLTFdKQogICAgICAgIHsKICAgICAgIC8vICAgU3lzdGVtLm91dC5wcmludGxuKGwxKyIgIitsMisiICIrczFbbDFdKyAiIGNoZWNrIDIiKTsKICAgICAgICAgICAgcz1zMVtsMS0xXStzOwogICAgICAgICAgICByZXR1cm4gbmFpdmUoczEsczIsbDEtMSxsMi0xLHMpKzE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGludCBmMT1uYWl2ZShzMSwgczIsIGwxLCBsMi0xLHMpOwogICAgICAgICAgICBpbnQgZjI9bmFpdmUoczEsIHMyLCBsMS0xLCBsMixzKTsKICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KGYxLCBmMik7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBMQ1NfRFAoY2hhcltdIHMxLGNoYXJbXSBzMikKICAgIHsKICAgICAgICBpZihzMS5sZW5ndGg9PTAgfHwgczIubGVuZ3RoPT0wKQogICAgICAgICAgICByZXR1cm4gOwogICAgICAgIAogICAgICAgIGludCBsMT1zMS5sZW5ndGgsbDI9czIubGVuZ3RoOwogICAgICAgIAogICAgICAgIGludCBtW11bXT1uZXcgaW50W2wxKzFdW2wyKzFdOwogICAgICAgIAogICAgICAgIGludCBpLGo7CiAgICAgICAKICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJMQ1MgU3RyaW5nID0gIik7CiAgICAgICBmb3IoaT0wO2k8PWwxO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGZvcihqPTA7ajw9bDI7aisrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZihpPT0wIHx8IGo9PTApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbVtpXVtqXT0wOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZihzMVtpLTFdPT1zMltqLTFdICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1baV1bal09bVtpLTFdW2otMV0rMTsKICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludChzMVtpLTFdKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICBtW2ldW2pdPU1hdGgubWF4KG1baV1bai0xXSxtW2ktMV1bal0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuTGVuZ3RoIChVc2luZyBEUCkgPSAiK21bbDFdW2wyXSk7CiAgICB9Cn0=
s1 = [A, B, C, D, G, H]
s2 = [A, E, D, F, H, R]
LCS length(Using Recursion) = 3
LCS String = ADH
Length (Using DP) = 3