public class DP {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1 = "abcbdab";
String s2 = "bdcaba";
int m = s1.length();
int n = s2.length();
int [][] c = new int[100][100];
int [][] b = new int[100][100];
LCSLength(s1,s2,b,c,m,n);
printLCS(s1,b,m,n);
}
public static void LCSLength(String s1,String s2,int b[][],int c[][],int m,int n)
{
for(int i = 0;i<=m;i++)
c[i][0]=0;
for(int j=1;j<=n;j++)
c[0][j]=0;
for(int i = 1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
if(s1.charAt(i-1)==s2.charAt(j-1))
{
c[i][j] = c[i-1][j-1]+1;
b[i][j] =0;
}
else if(c[i-1][j]>=c[i][j-1])
{
c[i][j] = c[i-1][j];
b[i][j] = 1;
}
else
{
c[i][j] = c[i][j-1];
b[i][j] =-1;
}
}
}
}
public static void printLCS(String s1,int b[][],int i,int j)
{
if(i==0||j==0)
{
return;
}
if(b[i][j]==0)
{
printLCS(s1,b,i-1,j-1);
System.out.print(s1.charAt(i-1));
}
else if(b[i][j] == 1)
{
printLCS(s1,b,i-1,j);
}
else
{
printLCS(s1,b,i,j-1);
}
}
}
最长公共子序列dp
最新推荐文章于 2022-07-08 14:21:40 发布