动态规划之最长子串(LCS)
来源:互联网 发布:macbook不能下载软件 编辑:程序博客网 时间:2024/05/16 19:02
动态规划问题之最长子串(LCS)
输入两个字符串string1,string2,找出其中重复的最长子串。
选取其中一个字符串,从第一个字符开始与另一个字符串的每个字符比较,相同为1,不同为0,构造第一行。接着第二个字符,最后构建成为一个二维数组。
eg:
string1 = abcString2 = dbc得到的二维数组为 : 0 0 0 0 1 0 0 0 1
可以算看最长子串为长度为2 为bc
为了使最后便于得到最长子串 现在如果某位置相同,则让此位置的二维数组的大小为其左上角的值+1
则原二维数组变为:
0 0 00 1 00 0 2
用一个[1][1]的数组记录数组位置2(数组从0开始) 长度为2 则最大子串为 位置2+1 -长度2起始 到位置2+1 结束
最后为得到最长子串时候有多个 重新遍历了此二维数据
code(java实现)
public static void main(String argv[]) { Scanner scanner = new Scanner(System.in); String data1 = scanner.next(); String data2 = scanner.next(); byte[] a1 = data1.getBytes(); byte[] a2 = data2.getBytes(); int low_l = a1.length > a2.length ? a2.length : a1.length; int data[][] = new int[data2.length() > data1.length() ? data1.length() : data2.length()][getMax(data1, data2)]; int max = 0; int max_index[][] = new int[2][3]; //构造矩阵 for (int i = 0; i < (data2.length() > data1.length() ? data1.length() : data2.length()); i++) { for (int j = 0; j < getMax(data1, data2); j++) { if (i < low_l && j < low_l && a1[i] == a2[j]) { if (j == 0 || i == 0) { data[i][j] = 1; } else { data[i][j] = data[i - 1][j - 1] + 1; } } if (data[i][j] > max) { max = data[i][j]; max_index[0][0] = i; max_index[0][1] = max; } } } //查找子串 for (int i = 0; i < (data2.length() > data1.length() ? data1.length() : data2.length()); i++) { for (int j = 0; j < getMax(data1, data2); j++) { if (data[i][j] == max) { System.out.println("最长子串 :" + MaxLcs(data1, i, max) + " 在第一个字符串的第" + (i + 2 - max) + "位开始"); } } }}//最大值static int getMax(String data1, String data2) { return data1.length() > data2.length() ? data1.length() : data2.length();}//得到子串static String MaxLcs(String data, int index, int end) { return data.substring(index + 1 - end, index + 1);}
阅读全文
1 0
- 动态规划之最长子串(LCS)
- 最长公共子串LCS--之动态规划
- 动态规划-最长公共子串LCS
- 动态规划算法之:最长公共子序列 & 最长公共子串(LCS)
- 动态规划算法之:最长公共子序列 & 最长公共子串(LCS)
- 动态规划算法之:最长公共子序列 & 最长公共子串(LCS)
- 面试(动态规划算法之:最长公共子序列 & 最长公共子串(LCS))
- 动态规划之LCS最长公共子序列和最长公共子串
- 动态规划算法之:最长公共子序列 & 最长公共子串(LCS)
- 动态规划之最长公共子序列(lcs)
- 动态规划之最长公共子序列(lcs)
- 动态规划之最长公共子序列(LCS)
- 动态规划之最长公共子序列(LCS)
- 动态规划入门之最长公共子序列(LCS)
- 动态规划之最长公共子序列(LCS)
- 动态规划之最长公共子序列(LCS)
- 动态规划经典之求最长公共子序列LCS
- 动态规划之最长公共子序列(LCS)
- EditText系列(1)-焦点问题处理
- Android 全屏的方案
- 【微营销】第12天 微营销实战技巧之准备微博号和微信号的具体实操
- printf函数简解!
- HDU DP记录路径
- 动态规划之最长子串(LCS)
- ZeroTier-全网畅连
- CodeM美团B轮A题 黑白树 【贪心】
- SAR卫星影像分析6月23日修水暴雨受灾情况
- 在 YARN 上运行 Spark
- j2ee的web工程,为工程的java build path中配置jre,和为tomcat配置jre,原来是不一样的。
- fitnesse 系列2 一个简单的例子
- xls xlsx csv 导出datatable
- SVN 简单解决 database disk image is malformed 故障