标签:style blog http color ar for div sp art
http://blog.csdn.net/yysdsyl/article/details/4226630
1 public class Main { 2 3 /** 4 * longest common subsequence 5 * @param args 6 */ 7 public static void main(String[] args) { 8 9 char[] x = {‘A‘,‘B‘,‘C‘,‘B‘,‘D‘,‘A‘,‘B‘}; 10 char[] y = {‘B‘,‘D‘,‘C‘,‘A‘,‘B‘,‘A‘}; 11 12 int[][] c = new int[x.length+1][y.length+1]; 13 int[][] b = new int[x.length+1][y.length+1]; 14 15 getLCS(c, b, x, y); 16 printLCS(b, x, x.length, y.length); 17 } 18 /** 19 * 20 * @param c 记录x[i]与y[j] 的LCS的长度 21 * @param b 记录匹配的路线 22 * @param x 23 * @param y 24 */ 25 public static void getLCS(int[][] c, int[][] b,char[] x, char[] y){ 26 27 int i, j; 28 29 int m = x.length;//c数组有m+1行 30 int n = y.length;//c数组有n+1列 31 32 for(i = 0; i <= m; i++){ 33 c[i][0] = 0; 34 } 35 for(i = 0; i <= n; i++){ 36 c[0][i] = 0; 37 } 38 39 for(i = 1; i <= m; i++){ 40 41 for(j = 1; j <= n; j++){ 42 43 /* 如果x[i-1]的字符与y[j-1]的字符相等 */ 44 if(x[i-1] == y[j-1]){ 45 46 /* 长度加1 */ 47 c[i][j] = c[i-1][j-1] + 1; 48 49 /* 匹配成功方向为斜向下 */ 50 b[i][j] = 0; 51 } 52 /* x[i-1]的字符与y[j-1]的字符不相等 */ 53 else if(c[i-1][j] >= c[i][j-1]) //来自 上面 的匹配结果大于 左面 的匹配结果 54 { 55 c[i][j] = c[i-1][j]; 56 /* 方向为向下 */ 57 b[i][j] = 1; 58 } 59 else 60 { 61 c[i][j] = c[i][j-1]; 62 /* 方向向左 */ 63 b[i][j] = -1; 64 } 65 } 66 67 } 68 } 69 /** 70 * 回溯法 打印匹配的字符 71 * @param b 72 * @param x 73 * @param i 74 * @param j 75 */ 76 public static void printLCS(int[][] b, char[] x, int i, int j){ 77 if(i == 0 || j == 0) 78 return; 79 80 /* 匹配成功的位置 */ 81 if(b[i][j] == 0) 82 { 83 printLCS(b, x, i-1, j-1); 84 System.out.print(x[i-1] + " "); 85 } 86 else if(b[i][j] == 1)//匹配时的方向是向下,回溯时方向向上 87 printLCS(b, x, i-1, j); 88 else 89 printLCS(b, x, i, j-1); 90 } 91 }
标签:style blog http color ar for div sp art
原文地址:http://www.cnblogs.com/wanghui390/p/3986150.html