最长公共子序列
来源:互联网 发布:转运公司知乎 编辑:程序博客网 时间:2024/06/01 19:02
1.问题描述:求两个字符数组的最长公共子序列,子序列可以是不连续的,也就是一个长度为n的字符数组可以有
2.数学分析:设字符数组
如果
那么设二维数组C[m][n]来记录A、B所有子序列的公共子序列长度,然后再通过回溯来得到公共子序列。有公式:
3.实现代码:
public class LCS{ static String[] a = { "B", "D", "C", "A", "B", "A" }; static String[] b = { "A", "B", "C", "B", "D", "A", "B" }; static int[][] c = new int[a.length + 1][b.length + 1]; static Stack<String> s = new Stack<String>(); public static void main(String args[]){ for(int i = 1, j = a.length; i <= j; i++){ for(int k = 1, l = b.length; k <= l; k++){ if(a[i-1].equals(b[k-1])) c[i][k] = c[i-1][k-1] + 1; else c[i][k] = (c[i][k-1] > c[i-1][k]) ? c[i][k-1] : c[i-1][k]; } } }//打印LCS,但是只能打印出一条LCS,打印全部LCS有空再补上 private static void printLcs(int ai, int bi){ if(ai == 0 || bi ==0) return; else if(a[ai-1].equals(b[bi-1])){ System.out.print(a[ai-1]); printLcs(ai-1, bi-1); } else if(c[ai][bi-1] == c[ai][bi]) printLcs(ai, bi-1); else printLcs(ai-1, bi); }}
0 0
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列...
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- Android 464XLAT
- Google Chrome 被Hao123.com 首页篡改的 解决办法
- 黑马程序员@java基础语法
- R语言入门系列2
- 极其弱势中的反弹
- 最长公共子序列
- 【Android】《第一行代码—Android》第九章总结
- 黑马程序员@java基本语句组成
- 图表组件FusionCharts v3.10.0发布【附下载】
- delphi不同计算机程序间通信用TServerSocket实现
- fastdfs安装和配置
- 16-mysql数据库优化之普通索引的创建
- 黑马程序员@数组及对数组的操作
- C++11中的小细节--字符串的原始字面量