最长公共子序列

来源:互联网 发布:windows 一键还原 编辑:程序博客网 时间:2024/04/30 23:29
public class Zuichanggonggongzixulie {static void pirntlcs(char[] a,char[] b){int s = b.length+1;int e = a.length+1;int[][]temp = new int[s][e];for(int i=0;i<s;i++){for(int j=0;j<e;j++){temp[i][j]=0;}}for(int i=1;i<s;i++){for(int j=1;j<e;j++){if(b[i-1]==a[j-1]){temp[i][j]=temp[i-1][j-1]+1;//一定要弄明白什么意思!}else                                                                                                                                                                                                                                 if(b[i-1]!=a[j-1]){if(temp[i-1][j]>=temp[i][j-1]){temp[i][j]=temp[i-1][j];}else{temp[i][j]=temp[i][j-1];}}}}System.out.println(temp[s-1][e-1]);printpath(b,temp,s-1,e-1);for(int i=0;i<s;i++){for(int j=0;j<e;j++){System.out.print(temp[i][j]);if(j==e-1){System.out.println();}}}}private static void printpath(char[] a,int[][] temp,int s,int e) {if(s==0||e==0){return;}if(temp[s-1][e]==temp[s][e-1]&&temp[s-1][e]==temp[s-1][e-1]){printpath(a,temp, s-1, e-1);System.out.print(a[s-1]);}else if(temp[s-1][e]>=temp[s][e-1]){printpath(a,temp, s-1, e);}else if(temp[s-1][e]<temp[s][e-1]){printpath(a,temp, s, e-1);}}public static void main(String[] args) {char[] a={'b','d','c','a','b','a'};char[] b={'a','b','c','b','d','a','b'};pirntlcs(a,b);}}

0 0
原创粉丝点击