动态规划之LCS最长公共子序列和最长公共子串
来源:互联网 发布:38号车评中心 知乎 编辑:程序博客网 时间:2024/06/05 19:48
一、最长公共子序列
最长公共子序列的结构有如下表示:
设序列X=<x1, x2, …, xm>和Y=<y1, y2, …, yn>的一个最长公共子序列Z=<z1, z2, …, zk>,则:
- 若xm=yn,则zk=xm=yn且Zk-1是Xm-1和Yn-1的最长公共子序列;
- 若xm≠yn且zk≠xm ,则Z是Xm-1和Y的最长公共子序列;
- 若xm≠yn且zk≠yn ,则Z是X和Yn-1的最长公共子序列。
package dynamic_programming;public class lcs0831 {public static void main(String[] args){String A="ABCDuiop";String B="CBCEuiop";int[][] strslen=new int[A.length()][B.length()];for(int i=0;i<A.length();i++){strslen[i][0]=0;}for(int j=0;j<B.length();j++){strslen[0][j]=0;}if(A.charAt(0)==B.charAt(0)){strslen[0][0]=1;}else{strslen[0][0]=0;}for(int i=1;i<A.length();i++){for(int j=1;j<B.length();j++){if(A.charAt(i)==B.charAt(j)){strslen[i][j]=strslen[i-1][j-1]+1; System.out.print(A.charAt(i)); }else{ strslen[i][j]=Math.max(strslen[i-1][j], strslen[i][j-1]);}}}System.out.print(strslen[A.length()-1][B.length()-1]);}}
输出为:BCuiop6
二、最长公共子串
package dynamic_programming;public class LCSProblem {public static void main(String[] args){String A="ABCDuiopc";String B="CBCEuiopb";StringBuilder commsStr=new StringBuilder();int bigest=0;int x = 0,y=0;int[][] strslen=new int[A.length()][B.length()]; for(int i=0;i<A.length();i++) { strslen[i][0]=0; } for(int j=0;j<B.length();j++) { strslen[0][j]=0; } if(A.charAt(0)==B.charAt(0)) strslen[0][0]=1; else { strslen[0][0]=0; } for(int i=1;i<A.length();i++) { for(int j=1;j<B.length();j++) { if(A.charAt(i)==B.charAt(j)) { strslen[i][j]=strslen[i-1][j-1]+1; if(bigest<strslen[i][j]) { bigest=strslen[i][j]; x=i; //x,y存储子串最后一个字母 y=j; } } else { strslen[i][j]=0; //与最长公共子序列不同点:如果两个字母不相等,则赋值为0 } } } System.out.println(bigest); while(x>=0&&y>=0) { if(A.charAt(x)==B.charAt(y)) { commsStr.append(A.charAt(x)); x--; y--; } else { break; } } System.out.println(commsStr.reverse());}}
输出结果为:
4
uiop
阅读全文
0 0
- 动态规划之LCS最长公共子序列和最长公共子串
- 动态规划算法之:最长公共子序列 & 最长公共子串(LCS)
- 动态规划算法之:最长公共子序列 & 最长公共子串(LCS)
- 动态规划算法之:最长公共子序列 & 最长公共子串(LCS)
- 面试(动态规划算法之:最长公共子序列 & 最长公共子串(LCS))
- 动态规划算法之:最长公共子序列 & 最长公共子串(LCS)
- 动态规划 最长公共子序列LCS、最长公共连续子串、最长重复子串
- 【动态规划】最长公共子序列LCS
- 动态规划---LCS最长公共子序列
- 动态规划-最长公共子序列【LCS】
- 动态规划-最长公共子序列(LCS)
- 动态规划-LCS最长公共子序列
- 动态规划----最长公共子序列LCS
- (动态规划)LCS-最长公共子序列
- 动态规划 最长公共子序列LCS
- 动态规划之最长公共子序列(lcs)
- 动态规划之最长公共子序列(lcs)
- 动态规划之最长公共子序列(LCS)
- Linux虚拟机的Mysql启动失败 ERROR! Multiple MySQL running but PID file could not be found (
- jquery.extend() 方法详解
- 5、flask第五站-简单数据库
- 类型转换
- oracle数据库 生成awr报告、ash报告详细步骤
- 动态规划之LCS最长公共子序列和最长公共子串
- ios NSUserDefault 记住用户名及密码
- 平衡二叉树判断 后序遍历
- 利用java的jdbc连接mysql数据库
- 购物问题
- 虚函数&多态
- 将10进制数字转化为26进制用A-Z来表示(华为笔试题第二题)
- JavaWeb——JSP内置对象request,response,重定向与转发 学习总结
- rqnoj 117