最长公共子串
给定两个字符串,求最长的公共子字符串并输出
public static String longestCommonSubString(String str1,String str2){
StringBuilder result = new StringBuilder();
if(str1 == null || str2 == null || str1.length() < 1 || str2.length() < 1)
return result.toString();
int len1 = str1.length();
int len2 = str2.length();
int max = -1;
int end1 = -1;
int end2 = -1;
int[][] lengths = new int[len1+1][len2+1];
for(int i = 1 ; i < len1 + 1 ; i++){
for(int j = 1; j < len2 + 1 ; j++){
if(str1.charAt(i-1) == str2.charAt(j-1)){
lengths[i][j] = lengths[i-1][j-1] + 1;
if(lengths[i][j] > max){
max= lengths[i][j];
end1 = i - 1;
end2 = j - 1;
}
}
}
}
int begin1 = end1 - max + 1;
int begin2 = end2 - max + 1;
while(begin1 >= 0 && begin1 < str1.length() && begin2 >= 0 && begin2 < str2.length()){
if(str1.charAt(begin1) == str2.charAt(begin2)){
result.append(str1.charAt(begin1));
begin1++;
begin2++;
}else{
break;
}
}
return result.toString();
}