动态规划:最长公共子序列
来源:互联网 发布:techsmith软件 编辑:程序博客网 时间:2024/06/06 07:22
import java.util.Scanner;//最长公共子序列public class LCS { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); char[] x; char[] y; String stringX=scanner.nextLine(); x=stringX.toCharArray(); String stringY=scanner.nextLine(); y=stringY.toCharArray(); //c[i][j]记录Xi和Yj的最长公共子序列长度 int[][] c=new int[x.length+1][y.length+1]; //b[i][j]记录c[i][j]的值是由哪个子问题解到的 int[][] b=new int[x.length+1][y.length+1]; LCSLength(x, y, x.length, y.length, b,c); System.out.println(c[x.length][y.length]); printLCS(x.length, y.length, x, b); } private static void LCSLength(char[] x,char[]y,int m,int n,int[][] b,int[][]c){ int i,j; for (i = 1; i <= m; i++) { c[i][0]=0; } for (j = 1; j <= n; j++) { c[0][j]=0; } for (i = 1; i <= m; i++) { for (j = 1; j <= n; j++) { if (x[i-1]==y[j-1]) { c[i][j]=1+c[i-1][j-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]=2; } else { c[i][j]=c[i][j-1]; b[i][j]=3; } } } } //打印最长子序列 private static void printLCS(int i,int j,char[] x,int[][] b){ if (i==0||j==0) return; if (b[i][j]==1) { printLCS(i-1, j-1, x, b); System.out.print(x[i-1]); } else if (b[i][j]==2) { printLCS(i-1, j, x, b); } else { printLCS(i, j-1, x, b); } }}
0 0
- 最长公共子序列&&最长公共子串---[动态规划]
- 动态规划-最长公共子序列、最长公共子串
- 动态规划之最长公共子序列
- 动态规划 ------- 最长公共子序列
- 动态规划实现最长公共子序列
- 【动态规划】最长公共子序列LCS
- 动态规划--最长公共子序列
- 动态规划:最长公共子序列
- 动态规划解决最长公共子序列
- 最长公共子序列-动态规划DP
- 动态规划--最长公共子序列
- 最长公共子序列(动态规划)
- 动态规划解决最长公共子序列
- 最长公共子序列(动态规划)
- 动态规划 最长公共子序列
- 动态规划 - 最长公共子序列
- 动态规划之最长公共子序列
- 最长公共子序列 [动态规划]
- 大数据运算系统(1)--- MapReduce
- ActiveMQ开启用户认证及消息持久化到数据库功能
- html显示当前时间
- 使用js写一个简单的判断年龄是否达标的页面
- 排序算法总结与实现
- 动态规划:最长公共子序列
- 结合定时器函数与window.status做出状态栏的文字动态移动效果
- hdu 1677 Nested Dolls LIS + 动态规划
- 中国剩余定理学习总结
- C# 鼠标滚动事件比例缩放图片
- 格式化字符串漏洞利用 五、爆破
- java之线程池解析
- WEB系统防止同一账号,同时在多个不同设备登录。
- C# 正则表达式记录