最长公共子序列
来源:互联网 发布:南京听说科技软件下载 编辑:程序博客网 时间:2024/06/15 00:02
公式:
代码:
// SubSequence public static void LCS(String s1, String s2) { int[][] matrix = new int[s1.length() + 1][s2.length() + 1]; String[][] flags = new String[s1.length() + 1][s2.length() + 1]; for (int i = 0; i <= s1.length(); i++) matrix[i][0] = 0; for (int j = 0; j <= s2.length(); j++) matrix[0][j] = 0; for (int i = 1; i <= s1.length(); i++) { for (int j = 1; j <= s2.length(); j++) { if (s1.charAt(i - 1) == s2.charAt(j - 1)) { matrix[i][j] = matrix[i - 1][j - 1] + 1; flags[i][j] = "2"; } else { if (matrix[i - 1][j] >= matrix[i][j - 1]) { matrix[i][j] = matrix[i - 1][j]; flags[i][j] = "0"; } else { matrix[i][j] = matrix[i][j - 1]; flags[i][j] = "1"; } } } } // print max length System.out.println(matrix[s1.length()][s2.length()]); // print subsequence Character[] s = new Character[matrix[s1.length()][s2.length()]]; int k = matrix[s1.length()][s2.length()]; int i = s1.length(); int j = s2.length(); while (i > 0 && j > 0) { if (flags[i][j].equals("2")) { s[--k] = s2.charAt(j - 1); i--; j--; } else { if (flags[i][j].equals("1")) { j--; } else { i--; } } } for (Character c : s) { System.out.print(c); } }
0 0
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列...
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 机器学习---梯度下降法
- Web——数据库的增加、删除、修改、查找
- 日常训练20161018 subset
- android 自定义控件的三种方式
- 关于return在循环语句中的使用
- 最长公共子序列
- Android 使用URL下载图片到本地并显示
- 合并两个排序的链表[剑指offer]之python实现
- 理解伪元素 :before 和 :after
- KNN算法
- 安卓4-0-4 armA8 LED驱动
- UVA 6907 Body Building Tarjan找桥
- 什么是软件测试?
- leetcode_191. Number of 1 Bits 二进制表示中1的个数 ,位运算的应用,按位与&