您的位置:首页 > 其它

最长公共子序列dp

2012-11-14 11:22 176 查看
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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: