构造矩阵

最长公共子串关键点:if(wordA[i]=wordB[j])//两个字母相同

                                        arrs[i][j]=arrs[i-1][j-1]+1

                                else  //两个字母不同

                                        arrs[i][j]=0

import java.util.Scanner;

public class LarCommSubStrSolution {

public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String str1=null,str2=null;
while(sc.hasNext()){
str1=sc.nextLine();
str2=sc.nextLine();
System.out.println(getRes(str1,str2));
}
}
public static String getSubStr(String str1,String str2){
int[][] arrs=new int[str1.length()][str2.length()];
String res="";
int x=0,y=0;
int max=0;
for(int i=0;i<str1.length();i++){
for(int j=0;j<str2.length();j++){
if(str1.charAt(i)!=str2.charAt(j)){
arrs[i][j]=0;
}else{
if(i-1>=0 && j-1>=0){
arrs[i][j]=arrs[i-1][j-1]+1;
if(arrs[i][j]>max){
max=arrs[i][j];
x=i;
y=j;
}
}else{
arrs[i][j]=1;
if(arrs[i][j]>max){
max=arrs[i][j];
x=i;
y=j;
}
}
}
}
}
while(x>=0 && y>=0 && arrs[x][y]!=0){
res=str1.charAt(x)+res;
x--;
y--;
}
return res;
}

}

最长公共子序列关键点:

        if wordA[i]==wordB[i]//两个字母相同

                arrs[i][j]=arrs[i-1][j-1]+1

        else //两个字母不同

                arrs[i][j]=Math.min(arrs[i-1][j],arrs[i][j-1])

最长公共子串、最长公共子序列

相关文章: