public static void Lcs_Length(String X,String Y,int c[][])
{
X=" "+X;
Y=" "+Y;
for(int i=1;i<X.length();i++)
{
c[i][0]=0;
}
for(int j=0;j<Y.length();j++)
{
c[0][j]=0;
}
for(int i=1;i<X.length();i++)
{
for(int j=1;j<Y.length();j++)
{
if(X.charAt(i)==Y.charAt(j))
{
c[i][j]=c[i-1][j-1]+1;
}
else if(c[i-1][j]>=c[i][j-1])
{
c[i][j]=c[i-1][j];
}
else
{
c[i][j]=c[i][j-1];
}
}
}
}
public static void Print_Lcs(int c[][],String X,int i,int j)
{
if(i==0||j==0)
return;
if(c[i][j]==c[i-1][j])
{
Print_Lcs(c,X,i-1,j);
}
else if(c[i][j]==c[i][j-1])
{
Print_Lcs(c,X,i,j-1);
}
else
{
Print_Lcs(c,X,i-1,j-1);
System.out.print(X.charAt(i-1)+" ");
}
}
public static void main(String[] args)
{
String X="ABCBDAB";
String Y="BDCABA";
int c[][]=new int[X.length()+1][Y.length()+1];
Lcs_Length(X,Y,c);
for(int i=0;i<c.length;i++)
{
for(int j=0;j<c[i].length;j++)
System.out.print(c[i][j]+" ");
System.out.println();
}
Print_Lcs(c,X,X.length(),Y.length());
}