多数组求他们的最长公共子串

                                  多数组求他们的最长公共子串

我们首先要判断字符串中最短的那个,以它的长度作为我们遍历位数的最大值。然后依次对每个字符串的每一位做判断,看是否相等,如果相等,就算一位,不相等,就停止遍历。
 

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;
    }
}


猜你喜欢

转载自blog.csdn.net/xiao__jia__jia/article/details/81569354