最长公共子串问题(可输出多个子串)
来源:互联网 发布:widowns无法连接网络 编辑:程序博客网 时间:2024/04/29 16:09
//最长公共子串,可输出多个public class TestLCS {public static void getLCString(char[] str1, char[] str2) {int i, j;int len1, len2;len1 = str1.length;len2 = str2.length;int maxLen = len1 > len2 ? len1 : len2;int[] max = new int[maxLen];int[] maxIndex = new int[maxLen];int[] c = new int[maxLen]; // 记录对角线上的相等值的个数for (i = 0; i < len2; i++) {for (j = len1 - 1; j >= 0; j--) {if (str2[i] == str1[j]) {if ((i == 0) || (j == 0))c[j] = 1;elsec[j] = c[j - 1] + 1;} else {c[j] = 0;}if (c[j] > max[0]) { // 如果是大于那暂时只有一个是最长的,而且要把后面的清0;max[0] = c[j]; // 记录对角线元素的最大值,之后在遍历时用作提取子串的长度maxIndex[0] = j; // 记录对角线元素最大值的位置//每一组max[k]和maxindex[k]对应记录了一组最长子串,如果发现c[j]>max[0],则之前记录的当前找到的最长子串都失效,所以要清空for (int k = 1; k < maxLen; k++) {max[k] = 0;maxIndex[k] = 0;}} else if (c[j] == max[0]) { // 有多个是相同长度的子串//每一组max[k]和maxindex[k]对应记录了一组最长子串for (int k = 1; k < maxLen; k++) {if (max[k] == 0) {max[k] = c[j];maxIndex[k] = j;break; // 在后面加一个就要退出循环了}}}}}for (j = 0; j < maxLen; j++) {if (max[j] > 0) {System.out.println("第" + (j + 1) + "个公共子串:");for (i = maxIndex[j] - max[j] + 1; i <= maxIndex[j]; i++)System.out.print(str1[i]);System.out.println(" ");}}}public static void main(String[] args) {String str1 = new String("abcd");String str2 = new String("dcba");getLCString(str1.toCharArray(), str2.toCharArray());}}
0 0
- 最长公共子串问题(可输出多个子串)
- 输入3个子串, 输出这3个子串的最大公共子串
- DP(最长公共子串问题)
- 最长公共子串(连续)问题
- 最长公共子串(连续)问题
- 最长公共子串(连续)问题
- 最长公共子串(连续)问题
- 最长公共子串(连续)问题
- 最长公共子串(连续)问题
- 最长公共子串问题
- 最长公共子串问题
- 最长公共子串问题
- 最长公共子串问题
- 最长公共子串问题
- 最长公共子串问题
- 最长公共子串问题
- 最长公共子串问题
- 最长公共子串问题
- ecshop数据库表2(ecs_ad)广告表
- Netty系列之Netty百万级推送服务设计要点
- php中判断变量是否为数组
- 面向对象与面向过程
- SpringBoot 之 Building a RESTful Web Service
- 最长公共子串问题(可输出多个子串)
- AngularJS入门
- MFC常见函数的用法
- PLSQL-存储过程
- excel大写变小写
- 分治算法之大整数相乘问题
- 关于vsnprintf的一些总结
- WebService CXF学习(入门篇3):WSDL、SOAP描述
- Navigation with Back and Up Developer Docs