最长公共字符串
来源:互联网 发布:地图开疆 知乎 编辑:程序博客网 时间:2024/06/08 10:03
网上有不少求最小公共字符串的算法,自己实现了一个。此处仅提供代码实现:
package com.wsy.dynamic;import java.util.Arrays;public class DynamicImprove { /** * 求2个字符串最长公共字符核心方法 * @param str1 * @param str2 * @param n * @param m */ public void printMaxStr(String str1, String str2, int n, int m){ //验证参数 validateParams(str1, str2, n, m); char[] a = str1.toCharArray(); char[] b = str2.toCharArray(); int[][] c = new int[n+1][m+1]; int[] max = new int[m+1];//存储当前最长公共字符串的长度,可能有多个 int[] maxIndex = new int[m+1];//存储最长公共字符串的下标,用于打印输出 for(int i = 0;i<=m;i++){ c[0][i] = 0; } for(int i = 0;i<=n;i++){ c[i][0] = 0; } for(int i = 0;i<max.length;i++){ max[i] = 0; maxIndex[i] = 0; } for(int i = 1;i<=n;i++){ for(int j = 1;j<=m;j++){ if(a[i-1] == b[j-1]){//必然会出现不相等 c[i][j] = c[i-1][j-1] + 1; }else{ c[i][j] = 0; } //针对c[j]的结果来调整max,maxIndex数组 if(c[i][j] > max[0]){//如果c[j]大于max[0],则清空max,maxIndex,并且置max[0] = c[j],maxIndex[0] = j Arrays.fill(max, 0); Arrays.fill(maxIndex, 0); max[0] = c[i][j]; maxIndex[0] = j; }else if(c[i][j] == max[0]){ for(int h = 0;h<max.length;h++){ if(max[h] == 0){ max[h] = c[i][j]; maxIndex[h] = j; break;//一旦出现一次,强制退出循环 } } } } } //打印最长公共字符串 for(int i = 0;i<m;i++){ if(max[i] > 0){ int start = maxIndex[i] - max[i]; int end = maxIndex[i]; System.out.println("第" + (i+1) + "个最长公共字符串:" +str2.substring(start, end)); } } } /** * 验证参数 * @param str1 * @param str2 * @param n * @param m */ private void validateParams(String str1, String str2, int n, int m) { // 验证参数,略 } public static void main(String[] args) { DynamicImprove demo = new DynamicImprove(); demo.printMaxStr("12345", "12345", 5, 5); }}
代码经过测试,没有问题,需要的同学可以自己拷贝使用~
阅读全文
0 0
- 最长公共子字符串
- 最长公共子字符串
- 最长公共子字符串
- 最长公共子字符串
- 最长公共子字符串
- 最长公共子字符串
- 最长公共字符串
- 最长公共子字符串
- 最长公共子字符串
- 最长公共字符串
- 最长公共子字符串
- 最长公共字符串
- 最长公共子字符串
- 最长公共字符串
- 最长公共子字符串
- 最长公共字符串问题--题解
- 11077 最长公共子字符串
- 最长公共子字符串问题
- 数据挖掘中常见的数据处理技巧
- FreeMarker系列--FreeMarker入门
- String使用 == 和 equal
- centos磁盘扩展
- 使用STL:vector创建二维数组
- 最长公共字符串
- jq 动态增加、删除表tr行
- 分布式事务中2PC与3PC的区别
- Java 多线程停止 定义标记
- 成为一名成功的程序员的要求
- PowerDesigner使用(一):PDM文件导入Oracle数据库
- [matplotlib]Basemap 安装使用简介
- 源码安装apache后启动报错 1.现象 安装apache时,在安装完后去启动报错如下。 httpd: Syntax error on line 161 of /etc/ht
- PHP中实现接收多个name相同但Value不相同表单数据