dp---两个字符串最长公共子序列
来源:互联网 发布:mac在线重装系统失败 编辑:程序博客网 时间:2024/06/05 05:45
package com.lyf.dp;/** * Created by fangjiejie on 2017/10/11. */public class LongestCommonSub { public static void main(String[] args) { System.out.println(getSub("1a2c3d4b56","b1d23ca45b6a")); } public static int[][] getdp(char []str1,char []str2){ int n1=str1.length; int n2=str2.length; int dp[][]=new int[n1][n2]; //dp[i][j]的含义是 遍历到(i,j)位置时,也就是 // 当str1的长度为i.str2的长度为j时,最长公共字串的长度 //dp初始化 dp[0][0]=str1[0]==str2[0]?1:0; for(int j=1;j<n2;j++){ dp[0][j]=Math.max(dp[0][j-1],str1[0]==str2[j]?1:0); } for(int i=1;i<n1;i++){ dp[i][0]=Math.max(dp[i-1][0],str1[i]==str2[0]?1:0); } //dp标记状态 for(int i=1;i<n1;i++){ for(int j=1;j<n2;j++){ dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1]); if(str1[i]==str2[j]){ dp[i][j]=Math.max(dp[i][j],dp[i-1][j-1]+1); } } } return dp; } public static String getSub(String s1,String s2){ char[] str1=s1.toCharArray(); char[] str2=s2.toCharArray(); int dp[][]=getdp(str1,str2); int n1=dp.length-1; int n2=dp[0].length-1; char result[]=new char[dp[n1][n2]]; System.out.println("最长公共子序列的长度为"+result.length); int index=result.length; while (index!=0){ if(n2>0&&dp[n1][n2]==dp[n1][n2-1]){ n2--; }else if(n1>0&&dp[n1-1][n2]==dp[n1][n2]){ n1--; }else{ result[--index]=str1[n1]; n1--; n2--; } } return String.valueOf(result); }}
阅读全文
0 0
- dp---两个字符串最长公共子序列
- 两个字符串的最长公共子序列
- 回文字符串【最长公共子序列】【DP】
- 最长公共子串序列一之两个字符串的最长公共子序列
- 最长公共子序列--DP
- DP---最长公共子序列
- 最长公共子序列dp
- DP 最长公共子序列
- DP 最长公共子序列
- 最长公共子序列-DP
- 【DP】最长公共子序列。
- 最长公共子序列 DP
- DP--最长公共子序列
- dp最长公共子序列
- dp 最长公共子序列
- DP最长公共子序列
- 最长公共子序列-dp
- dp--最长公共子序列
- 请不要做浮躁的人
- 用异地组网路由器,实现家校互联
- 使用 Gogs 搭建自己的 Git 服务器
- HtmlAgilityPack 去网页返回内容
- iOS引导页
- dp---两个字符串最长公共子序列
- Qt5.9中关于QWebEngineView调用load()软件崩溃
- 【android】build.prop和常用属性的释义
- 姿态估计
- CentOS下的Mysql乱码问题
- python实现二叉树以及二叉树的遍历--1(面向对象的方法实现)
- 收益及付费相关
- IE页面中的img图层总是会高于其他图层
- 让.net2.0无Tls12也能去验证paypal