最长公共子序列求解

mac2024-03-27  33

最长公共子序列求解

package longsequence; import java.util.Scanner; public class Long_sequence { public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.println("此程序用来求最长子序列问题:\n"+"请输入两个字符串"); String str1,str2; System.out.print("str1= "); str1=input.next(); System.out.print("str2= "); str2=input.next(); char a[]=str1.toCharArray(); char b[]=str2.toCharArray(); //char m=input.next().charAt(0); System.out.println("由以上填充数组可见,匹配的最长序列length= "+Lsequence(a,b)); } static int Lsequence(char a[],char b[]) { int c[][]=new int[a.length+1][b.length+1]; for(int i=0;i<a.length+1;i++) { for(int j=0;j<b.length+1;j++) { if(i==0||j==0) { c[i][j]=0; } else if(i>0&&j>0&&a[i-1]==b[j-1]) { c[i][j]=c[i-1][j-1]+1; } else if(i>0&&j>0&&a[i-1]!=b[j-1]) { c[i][j]=max(c[i][j-1],c[i-1][j]); } } } for(int i=0;i<a.length+1;i++) { for(int j=0;j<b.length+1;j++) { System.out.print(c[i][j]+" "); } System.out.println(); } return c[a.length][b.length]; } static int max (int a,int b) { if(a>b)return a; else return b; } }

最新回复(0)