最长公共子序列-java实现
来源:互联网 发布:优盘 启动 windows pe 编辑:程序博客网 时间:2024/06/14 08:35
之前看过一个LCS算法的实现过程,觉得太过繁琐。自己写了一个比较简单的,此处仅仅介绍实现过程。
程序代码测试通过,需要的童鞋可以在这里拷贝一下,代码如下:
package com.wsy.dynamic;import java.util.HashMap;import java.util.Map;public class ImpLCS { public String getLCS(String str1, String str2, int n, int m){ validate(str1, str2); char[] a = str1.toCharArray(); char[] b = str2.toCharArray(); int[][] c = new int[n+1][m+1]; //存放序列 Map<String,String> map = new HashMap<String,String>(); //初始化参数 for(int i = 0;i<=n;i++){ c[i][0] = 0; map.put(i + "0", ""); } for(int i = 0;i<=m;i++){ c[0][m] = 0; map.put("0" + i, ""); } 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; String tmp = map.get(changeNum(i-1,j-1)); map.put(changeNum(i,j), tmp + String.valueOf(a[i-1])); }else{ if(c[i][j-1] > c[i-1][j]){ c[i][j] = c[i][j-1]; String tmp = map.get(changeNum(i,j-1)); map.put(changeNum(i,j), tmp); }else{ c[i][j] = c[i-1][j]; String tmp = map.get(changeNum(i-1,j)); map.put(changeNum(i,j), tmp); } } } } String key = changeNum(n,m); return map.get(key); } /** * 将数字拼接成字符串 * @param i * @param j * @return */ private String changeNum(int i, int j) { StringBuilder sb = new StringBuilder(String.valueOf(i)); return sb.append(j).toString(); } /** * 验证参数 * @param str1 * @param str2 */ private void validate(String str1, String str2) { // 略 } public static void main(String[] args) { ImpLCS lcs = new ImpLCS(); String rs = lcs.getLCS("12345", "12334", 5, 4); System.out.println("---:" + rs); }}
阅读全文
0 0
- Java实现最长公共子序列
- java实现最长公共子序列
- Java实现最长公共子序列
- Java实现最长公共子序列
- 最长公共子序列Java代码实现
- 最长公共子序列 java 代码实现
- Java实现-最长公共子序列
- 最长公共子序列-java实现
- 最长公共子序列实现
- 最长公共子序列实现
- 最长公共子序列Java
- 最长公共子序列java
- “最长上升子序列,最大连续子序列和,最长公共子串”的Java实现
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- java实现最长公共子序列和最长公共子字符串
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- webpack--概念8--manifest+runtime+构建目标
- 怎样利用思维导图快速记忆
- C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- IAR踩坑:优化与volatile
- dubbo&hsf&spring-cloud简单介绍
- 最长公共子序列-java实现
- SonarQube代码质量管理平台安装与使用
- 远程连接Oracle的配置
- eclipse中编写spring配置文件时有design和source,namespace 如何设置出来的问题
- esp8266 error: espcomm_open failed
- JavaScript的事件
- Linux下启用RNDIS host端与device端
- LintCode 字符串置换
- MySQL、Oracle数据库分页