最长公共子序列 LCS
2013-06-15 16:37
274 查看
public class LCS { public static void main(String[] args) { char[] x = new char[]{' ','A','B','C','B','D','A','B'}; char[] y = new char[]{' ','B','D','C','A','B','A'}; int m = x.length-1; int n = y.length-1; int[][] c = new int[m+1][n+1]; int[][] b = new int[m+1][n+1]; for(int i=1; i<=m; i++) { for(int j=1;j<=n; j++) { if(x[i] == y[j]) { c[i][j] = c[i-1][j-1] + 1; b[i][j] = 2;//左上 0 } else if(c[i-1][j] >= c[i][j-1]) { b[i][j] = -1;//上 -1 c[i][j] = c[i-1][j]; } else { b[i][j] = 1;//左 1 c[i][j] = c[i][j-1]; } } } LCS lcs = new LCS(); lcs.print(b, x, m, n); } private void print(int[][] b, char[] x, int i, int j) {//当在b[i][j] == 0时表明x[i]=y[j]是lcs的一个元素 if(i == 0 || j==0) return; if(b[i][j] == 2) { print(b,x,i-1,j-1); System.out.print(x[i] + " "); } else if(b[i][j] == -1) { print(b,x,i-1,j); } else { print(b,x,i,j-1); } } }
相关文章推荐
- 1006 最长公共子序列Lcs
- UVA - 10066 The Twin Towers(LCS最长公共子序列)
- 最长公共子序列问题LCS
- 基于动态规划的最长公共子序列实现(LCS)
- 算法学习心得——动态规划法实现最长公共子序列(LCS)
- 最长公共子序列LCS
- POJ 2250 Compromise(文章的最长公共子序列LCS)
- 最长公共子序列LCS(C++实现)
- LCS最长公共子序列
- 最长公共子序列(LCS)
- 【LCS】BZOJ2423(HAOI2010)[最长公共子序列]题解
- 最长公共子序列 LCS
- 动态规划---LCS最长公共子序列
- lcs 最长公共子序列 O(nlogn)算法
- 程序员编程艺术第十一章:最长公共子序列(LCS)问题
- hdu 1159 Common Subsequence(LCS最长公共子序列)
- 重玩动态规划二 LCS 最长公共子序列
- 动态规划(一)最长公共子序列问题 LCS 总结
- 最长公共子序列(LCS)问题
- 杭电1159————LCS(最长公共子序列)