多数组求他们的最长公共子串
我们首先要判断字符串中最短的那个,以它的长度作为我们遍历位数的最大值。然后依次对每个字符串的每一位做判断,看是否相等,如果相等,就算一位,不相等,就停止遍历。
import java.awt.Checkbox;
import java.awt.List;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.PriorityQueue;
import javax.naming.spi.DirStateFactory.Result;
public class Main{
public static void main(String[] args){
String [] arrStrings = {"ca","a","aa"};
System.out.println(new Main(). longestCommonPrefix(arrStrings) );
}
public static String longestCommonPrefix(String[] strs) {
int len = strs.length;
if(len == 0){
return "";
}
int max = 0,temp = 0;
int max_i = 0;
for(int i = 0; i < len; i++) {
temp = strs[i].length();
if(max < temp) {
max = temp;
max_i = i;
}
}
String tempString = strs[max_i];
for(int i = 0; i < len; i++) {
if(i != max_i){
tempString = lcs(tempString, strs[i]);
}
}
return tempString;
}
public static String lcs(String str1, String str2){
int len1 = str1.length();
int len2 = str2. length();
int arr[][] = new int[len1+1][len2+1];
int max = 0;
int max_i = 0;
for(int i = 0; i <= len1; i++) {
for(int j = 0; j <= len2; j++) {
if(i == 0 || j == 0) {
arr[i][j] = 0;
}else if(str1.charAt(i-1) == str2.charAt(j-1)){
arr[i][j] = arr[i-1][j-1] +1;
if(arr[i][j] > max){
max = arr[i][j];
max_i = i;
}
}else {
arr[i][j] = Math.max(arr[i][j-1], arr[i-1][j]);
}
}
}
String result=str1.substring(max_i - arr[len1][len2],max_i);
return result;
}
}