最长公共子序列dp

来源:互联网 发布:ubuntu bugzilla安装 编辑:程序博客网 时间:2024/05/01 19:48
public class DP {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString 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);}}}

原创粉丝点击