最长公共子序列
来源:互联网 发布:东莞房地产成交数据 编辑:程序博客网 时间:2024/06/07 02:52
//最长公共子序列public class MaxLenSequence{//获得最长公共子序列长度(动态规划矩阵)public static int[][]getdp(char[]str1,char[]str2){int[][]dp=new int[str1.length][str2.length];dp[0][0]=str1[0]==str2[0]?1:0;//第一列的计算for(int i=1;i<str1.length;i++){dp[i][0]=Math.max(dp[i-1][0],str1[i]==str2[0]?1:0);}//第一行的计算for(int j=1;j<str2.length;j++){ dp[0][j]=Math.max(dp[0][j-1],str1[0]==str2[j]?1:0);}//其他位置的计算for(int i=1;i<str1.length;i++){for(int j=1;j<str2.length;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;}//获得最长公共子序列(通过dp还原最长公共子序列)public static String MaxlenSequence(String str1,String str2){if(str1==null||str2==null||str1.equals("")||str2.equals("")){return "";}//将字符串转换为数组char[]chs1=str1.toCharArray();char[]chs2=str2.toCharArray();int[][]dp=getdp(chs1,chs2);int m=chs1.length-1;int n=chs2.length-1;char[]res=new char[dp[m][n]]; int index=res.length-1; while(index>=0) { if(n>0&&dp[m][n]==dp[m][n-1]) { n--; } else if(m>0&&dp[m][n]==dp[m-1][n]) { m--; } else{ res[index--]=chs1[m]; m--; n--; } } return String.valueOf(res);}public static void main(String[]args){ String str1="1A2C43D4B56"; String str2="B1D23CA45B6A"; System.out.println(MaxlenSequence(str1,str2)); }}
阅读全文
0 0
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列...
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- vue 过滤器基本用法
- Servlet介绍(一)
- 逆向微信------给微信加上控件
- 源码解析之--ArrayList
- Anaconda Python OpenCV(OpenCV contrib)导入cv2出现找不到dll问题
- 最长公共子序列
- MyEclipse中的快捷键
- 浅析ArrayList和LinkedList
- Win2008 Server R2 服务器拒绝共享访问
- 复制字符串
- vim 快捷键
- 移动端touchstart、touchend触摸事件的简单使用
- Android DeepLink
- 谁丢了我的外卖订单,来聊聊如何障O2O线上业务稳定