最长公共子序列
来源:互联网 发布:网络视听通则 编辑:程序博客网 时间:2024/05/19 17:57
import java.util.Scanner;public class Test{public static void main(String[] args) {Scanner input=new Scanner(System.in);String s1=input.nextLine();String s2=input.nextLine();compare(s1,s2);input.close();}public static void compare(String s1,String s2){int m=s1.length();int n=s2.length();int c[][]=new int[m+1][n+1];int d[][]=new int[m+1][n+1]; //新增数组用来记录c[i][j]前继节点for(int i=0;i<m+1;i++){ //0表示没有 1表示左边c[i][0]=0; //2表示斜上方,3表示正上方d[i][0]=0;}for(int j=0;j<n+1;j++){c[0][j]=0;d[0][j]=0;}for(int i=1;i<m+1;i++){for(int j=1;j<n+1;j++){if(s1.charAt(i-1)==s2.charAt(j-1)){c[i][j]=c[i-1][j-1]+1;d[i][j]=2;}else{if(c[i-1][j]>c[i][j-1]){d[i][j]=1;c[i][j]=c[i-1][j];}else{d[i][j]=3;c[i][j]=c[i][j-1];}}}}print(s1,d,m,n);}public static void print(String s,int[][] d,int m,int n){if((m==0&&n==0)||d[m][n]==0)return;if(d[m][n]==1){print(s,d,m-1,n);}else if(d[m][n]==3){print(s,d,m,n-1);}else{print(s,d,m-1,n-1);System.out.print(s.charAt(m-1));}}/** * 不用额外开辟空间输出公共子串的方法 * @param c * @param s1 * @param s2 * @param m * @param n */// public static void fun(int[][] c,String s1,String s2,int m,int n){// if((m==0&&n==0)||c[m][n]==0)// {// return;// }// if(s1.charAt(m-1)==s2.charAt(n-1)){// fun(c,s1,s2,m-1,n-1);// System.out.print(s1.charAt(m-1));// }else if(c[m][n]==c[m-1][n]){// fun(c,s1,s2,m-1,n);// }else{// fun(c,s1,s2,m,n-1);// }// }}
0 0
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列...
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- C++map容器用法
- int型与string相互转换
- 冒泡算法
- Linux下安装Jdk,Tomcat,mysql,以及发布项目
- phpcms 新建模型字段超过100个的时候
- 最长公共子序列
- 丑数
- 每天一个linux命令(56):netstat命令
- 1712: 神密的数列(打表)
- 生产者消费者问题的java实现
- Dialog中 不同Recycleview的数据交互
- 各种移动GPU压缩纹理的使用方法
- binbinyang-----Java动态绑定机制的内幕
- Android service启动dialog对话框 全局对话框