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实现相关推荐

  1. 最长公共子序列算法 java,算法学习——java实现最长公共子序列,

    算法学习--java实现最长公共子序列学习--java实现最长公共子序列的算法, 实验目的: 输入两个同类型的序列,用动态规划的方法计算它们最长的公共子序列的长度和序列. (推荐教程: Java视频教 ...

  2. java最长公共子序列算法_算法学习——java实现最长公共子序列

    实验目的: 输入两个相同类型的序列,用动态规划方法计算他们的最长公共子序列的长度以及序列. 思路: 1.先用一个二维数组存储最长公共子序列的长度,还要记录每个值的状态 2.根据记录值的状态,递归回溯求 ...

  3. 最长公共子序列Java代码实现

    最长公共子序列定义:两个或多个已知数列的子序列集合中最长的就是最长公共子序列. 比如数列A = "abcdef"和B = "adefcb",那么两个数列的公共子 ...

  4. 动态规划示例汇总-Java版(组合硬币、跳台阶、最小路径和、最长递增子序列、最长公共子序列、01背包问题、最小编辑代价)

    动态规划算法示例汇总-Java版 组合硬币 Java解题-暴力搜索 Java解题-记忆搜索 Java解题-动态规划(两种写法) 跳台阶 Java解题-暴力递归 Java解题-动态规划 矩阵最小路径和 ...

  5. java实现最长连续子序列_最长公共子序列/最长公共子串 Python/Java实现

    关注我的微信公众号:后端技术漫谈 不定期推送关于后端开发.爬虫.算法题.数据结构方面的原创技术文章,以及生活中的逸闻趣事. 我目前是一名后端开发工程师.主要关注后端开发,数据安全,网络爬虫,物联网,边 ...

  6. 最长公共子序列(JAVA实现)

    题目标题: 计算两个字符串的最长公共子序列的长度,字符不区分大小写. 输入描述:输入两个字符串,分两行输入. 输出描述:输出一个整数. 示例: 输入: 测试数据1(注,字符串前有空格): 12asdf ...

  7. [Java] 蓝桥杯ADV-202 算法提高 最长公共子序列

    问题描述 给定两个字符串,寻找这两个字串之间的最长公共子序列. 输入格式 输入两行,分别包含一个字符串,仅含有小写字母. 输出格式 最长公共子序列的长度. 样例输入 abcdgh aedfhb 样例输 ...

  8. Java动态规划求最长公共子序列(LCS)

    最长公共子序列(LCS) 定义:在序列X和序列Y中同时出现的元素,按照脚标从小到大排列的这样的序列.         String x = "ABCBDABGGGTT";      ...

  9. 用java设计一个文件查重程序,输入两个文本文件,输出两个文本文件的重复率(最长公共子序列的应用)...

    你可以使用java代码来设计一个文件查重程序.首先,你需要读取两个文本文件的内容,将它们存储在字符串变量中.然后,你可以使用最长公共子序列(LCS)算法来计算两个字符串的重复率. LCS算法的实现方法 ...

最新文章

  1. ASP.NET MVC 概述
  2. ButterKnife与RxBinding中文件重复问题解决
  3. Redis RDB、AOF持久化详解
  4. 目前计算机病毒只有网络型病毒吗,在web.xml中使用()标签配置过滤器
  5. 前端,我为什么不要你(转)
  6. 【每日一题】7月9日题目 Color
  7. mysql 未知列_mysql – ‘字段列表’连接中的未知列’..’
  8. 微信小程序开发学习笔记005--微信小程序组件详解
  9. 自定义委托,事件,参数的简单随笔
  10. 防爆知识:危险场所划
  11. Hadoop1.2.1源码解析系列:JT与TT之间的心跳通信机制——命令篇
  12. 数论基础——扩展欧几里德算法解析
  13. win10下安装ubuntu双系统
  14. gopher攻击mysql_从一道CTF题目看Gopher攻击MySql
  15. ntp子母钟(gps子母钟系统)时钟系统在智能交通系统中的重要性
  16. 中易浏览器(enjoyie) v3.0.1.15 完整绿色版 免费
  17. table表格竖列横排显示
  18. android字符串+数字变量方法之%1$s、%1$d的用法
  19. python用bbp公式计算圆周率_圆周率π现在已经算到多少位了?具体是什么数字?...
  20. python椭圆曲线加密算法_ECC 椭圆曲线加密算法学习————安全性问题与实战...

热门文章

  1. JAVASCRIPT中THIS指的是什么?
  2. 2020年中国核电阀门行业市场现状分析,新增装机+维修备件持续创造需求「图」
  3. ╭*★*╯浮华一场烟雨梦,叶落无痕情无踪╭*★*╯
  4. 元宇宙大热,DiDi message将成为未来世界的连接器
  5. Windows环境下安装pkg-config
  6. win7连不上手机热点,怎么处理?
  7. 全球区块链农业技术平台Dimitra与 Morpheus AMA回顾
  8. GitHub怎么用?GitHub是什么?新手怎么用GitHub?图文并茂,不看都不行
  9. 【翻译】HyNet: Learning Local Descriptor with Hybrid Similarity Measure and Triplet Loss
  10. android 小球曲线运动,如图所示,将一小球向斜向上抛出,小球做复杂的曲线运动.实际分析处理...