java lcs_LCS最长公共子序列java实现
packagekpp.base;/*** 获取两个字符串的最长公共子序列
*@authorkpp
**/
public classLCSTest {private static String lcs = "";public static voidmain(String[] args) {//TODO Auto-generated method stub//保留空字符串是为了getLength()方法的完整性也可以不保留//但是在getLength()方法里面必须额外的初始化c[][]第一个行第一列
String firstStr = "ABCBDAB";
String secondStr= "BDCABA";/*String[] x = new String[firstStr.length()+1];
String[] y = new String[secondStr.length()+1];*/String[] x=strToArray(firstStr);
String[] y=strToArray(secondStr);/*String[] x = {"", "A", "B", "C", "B", "D", "A", "B"};
String[] y = {"", "B", "D", "C", "A", "B", "A"};*/
int[][] b =getSearchRoad(x, y);
Display(b, x, x.length-1, y.length-1);
System.out.println("lcs:"+lcs);
}/*** 字符串转数组,并且数组的第0个元素为""
*@paramstr
*@return
*/
private staticString[] strToArray(String str){
String[] strArray= new String[str.length()+1];
strArray[0] = "";for(int i = 1; i < strArray.length;i++){
strArray[i]= ""+str.charAt(i-1);
}returnstrArray;
}/*** 获得LCS矩阵的路径走向
*@paramx 第一个数组
*@paramy 第二个数组
*@return返回一个记录决定搜索的方向的数组*/
public static int[][] getSearchRoad(String[] x, String[] y)
{int[][] b = new int[x.length][y.length];int[][] c = new int[x.length][y.length];for(int j = 0;j < y.length;j++){
c[0][j] = 0;
}for(int i = 0;i < x.length;i++){
c[i][0] = 0;
}for(int i=1; i
{for(int j=1; j
{//对应第一个性质//x[i].equals(y[j])是指x[i]与y[j]的值相同
if( x[i].equals(y[j]))
{
c[i][j]= c[i-1][j-1] + 1;
b[i][j]= 1;
}//x[i] == y[j]是指x[i]与y[j]的地址相同
/*if( x[i] == y[j])
{
c[i][j] = c[i-1][j-1] + 1;
b[i][j] = 1;
}*/
//对应第二或者第三个性质
else if(c[i-1][j] >= c[i][j-1])
{
c[i][j]= c[i-1][j];
b[i][j]= 0;
}//对应第二或者第三个性质
else{
c[i][j]= c[i][j-1];
b[i][j]= -1;
}
}
}returnb;
}/*** 自矩阵右下至左上回溯,根据搜索路径获取LCS
*@paramb 搜索路径数组
*@paramx 第一个数组
*@parami
*@paramj*/
public static void Display(int[][] b, String[] x, int i, intj)
{if(i == 0 || j == 0)return;if(b[i][j] == 1)
{
Display(b, x, i-1, j-1);
lcs+=x[i];
}else if(b[i][j] == 0)
{
Display(b, x, i-1, j);
}else if(b[i][j] == -1)
{
Display(b, x, i, j-1);
}
}
}
java lcs_LCS最长公共子序列java实现相关推荐
- 最长公共子序列算法 java,算法学习——java实现最长公共子序列,
算法学习--java实现最长公共子序列学习--java实现最长公共子序列的算法, 实验目的: 输入两个同类型的序列,用动态规划的方法计算它们最长的公共子序列的长度和序列. (推荐教程: Java视频教 ...
- java最长公共子序列算法_算法学习——java实现最长公共子序列
实验目的: 输入两个相同类型的序列,用动态规划方法计算他们的最长公共子序列的长度以及序列. 思路: 1.先用一个二维数组存储最长公共子序列的长度,还要记录每个值的状态 2.根据记录值的状态,递归回溯求 ...
- 最长公共子序列Java代码实现
最长公共子序列定义:两个或多个已知数列的子序列集合中最长的就是最长公共子序列. 比如数列A = "abcdef"和B = "adefcb",那么两个数列的公共子 ...
- 动态规划示例汇总-Java版(组合硬币、跳台阶、最小路径和、最长递增子序列、最长公共子序列、01背包问题、最小编辑代价)
动态规划算法示例汇总-Java版 组合硬币 Java解题-暴力搜索 Java解题-记忆搜索 Java解题-动态规划(两种写法) 跳台阶 Java解题-暴力递归 Java解题-动态规划 矩阵最小路径和 ...
- java实现最长连续子序列_最长公共子序列/最长公共子串 Python/Java实现
关注我的微信公众号:后端技术漫谈 不定期推送关于后端开发.爬虫.算法题.数据结构方面的原创技术文章,以及生活中的逸闻趣事. 我目前是一名后端开发工程师.主要关注后端开发,数据安全,网络爬虫,物联网,边 ...
- 最长公共子序列(JAVA实现)
题目标题: 计算两个字符串的最长公共子序列的长度,字符不区分大小写. 输入描述:输入两个字符串,分两行输入. 输出描述:输出一个整数. 示例: 输入: 测试数据1(注,字符串前有空格): 12asdf ...
- [Java] 蓝桥杯ADV-202 算法提高 最长公共子序列
问题描述 给定两个字符串,寻找这两个字串之间的最长公共子序列. 输入格式 输入两行,分别包含一个字符串,仅含有小写字母. 输出格式 最长公共子序列的长度. 样例输入 abcdgh aedfhb 样例输 ...
- Java动态规划求最长公共子序列(LCS)
最长公共子序列(LCS) 定义:在序列X和序列Y中同时出现的元素,按照脚标从小到大排列的这样的序列. String x = "ABCBDABGGGTT"; ...
- 用java设计一个文件查重程序,输入两个文本文件,输出两个文本文件的重复率(最长公共子序列的应用)...
你可以使用java代码来设计一个文件查重程序.首先,你需要读取两个文本文件的内容,将它们存储在字符串变量中.然后,你可以使用最长公共子序列(LCS)算法来计算两个字符串的重复率. LCS算法的实现方法 ...
最新文章
- ASP.NET MVC 概述
- ButterKnife与RxBinding中文件重复问题解决
- Redis RDB、AOF持久化详解
- 目前计算机病毒只有网络型病毒吗,在web.xml中使用()标签配置过滤器
- 前端,我为什么不要你(转)
- 【每日一题】7月9日题目 Color
- mysql 未知列_mysql – ‘字段列表’连接中的未知列’..’
- 微信小程序开发学习笔记005--微信小程序组件详解
- 自定义委托,事件,参数的简单随笔
- 防爆知识:危险场所划
- Hadoop1.2.1源码解析系列:JT与TT之间的心跳通信机制——命令篇
- 数论基础——扩展欧几里德算法解析
- win10下安装ubuntu双系统
- gopher攻击mysql_从一道CTF题目看Gopher攻击MySql
- ntp子母钟(gps子母钟系统)时钟系统在智能交通系统中的重要性
- 中易浏览器(enjoyie) v3.0.1.15 完整绿色版 免费
- table表格竖列横排显示
- android字符串+数字变量方法之%1$s、%1$d的用法
- python用bbp公式计算圆周率_圆周率π现在已经算到多少位了?具体是什么数字?...
- python椭圆曲线加密算法_ECC 椭圆曲线加密算法学习————安全性问题与实战...
热门文章
- JAVASCRIPT中THIS指的是什么?
- 2020年中国核电阀门行业市场现状分析,新增装机+维修备件持续创造需求「图」
- ╭*★*╯浮华一场烟雨梦,叶落无痕情无踪╭*★*╯
- 元宇宙大热,DiDi message将成为未来世界的连接器
- Windows环境下安装pkg-config
- win7连不上手机热点,怎么处理?
- 全球区块链农业技术平台Dimitra与 Morpheus AMA回顾
- GitHub怎么用?GitHub是什么?新手怎么用GitHub?图文并茂,不看都不行
- 【翻译】HyNet: Learning Local Descriptor with Hybrid Similarity Measure and Triplet Loss
- android 小球曲线运动,如图所示,将一小球向斜向上抛出,小球做复杂的曲线运动.实际分析处理...