最大公共连续子串

2019-06-21  本文已影响0人  Orson_4597

给定一组字符串,找到最长公共连续子串;
动态规划转移方程
str1[i] == str2[j]: dp[i][j] = dp[i - 1][j - 1] + 1
str1[i] != str2[j]: 0

class Solution {
public String longestCommon(String[] strs) {
if (strs.length == 0 || strs == null) return "";
String common = strs[0];
for (int i = 1; i < strs.length; i++) {
if (common.equals("")) {
return "";
}
else {
common = find2Common(common, strs[i]);
}
}
return common;
}

private String find2Common(String str1, String str2) {
    char[] char1 = str1.toCharArray();
    char[] char2 = str2.toCharArray();
    int max = 0;
    int end = 0;
    int[][] dp = new int[str1.length()][str2.length()];
    
    for (int i = 0; i < str1.length(); i++) {
        for (int j = 0; j < str2.length(); j++) {
            if (char1[i] == char2[j]) {
                dp[i][j] = (i > 0 && j > 0) ? dp[i - 1][j - 1] + 1 : 1;
                if (dp[i][j] > max) {
                    max = dp[i][j];
                    end = i;
                }
            }
            else {
                dp[i][j] = 0;
            }
            
        }
    }
    
    String resStr = ""; 
    if (max != 0) {
        char[] res = new char[max];
        for (int i = end - max + 1; i <= end; i++) {
            res[i - (end - max + 1)] = char1[i];
        }
        resStr = String.valueOf(res);
    }
    return resStr;
}

}

上一篇 下一篇

猜你喜欢

热点阅读