给定一组字符串,找到最长公共连续子串;
动态规划转移方程
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;
}
}
网友评论