构造矩阵
最长公共子串关键点: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])