1. 代码部分如下:
public static void main(String[] args) {
String[] aa = new String[]{"abc", "abcd", "bcfgh", "abcdd"};
System.out.print(getCommonSubWord(aa));
}
public static String getCommonSubWord(String inArr[]) {
if (inArr.length > 1) {
if (inArr[0].length() > inArr[1].length()) {
String temp = inArr[0];
inArr[0] = inArr[1];
inArr[1] = temp;
}
//第一次查询默认小的字符串就是最小字串长度
String subWord = getCommonSubWordOfTwoWord(inArr[0], inArr[1], inArr[0].length());
for (int j = 2; j < inArr.length ; j++) {
//只要有一个字符串不包含之前的最长字串,就需要基于之前的结果依次缩小最长字串
if (subWord != null && !inArr[j].contains(subWord)) {
subWord = getCommonSubWordOfTwoWord(inArr[0], inArr[1], subWord.length()-1);
j = 1;
}
}
return subWord;
}
return inArr[0];
}
public static String getCommonSubWordOfTwoWord(String first, String second, int beginLength) {
for (int i = first.length(); i >= 0; i--) {
for (int j = first.length(); j - i > 0; j--) {
String son = first.substring(j-i-1, j);
//这里只输出长度小于等于beginLength的子串
if (second.contains(son) && son.length() <= beginLength) {
return son;
}
}
}
return null;
}
2. 测试用例
入参:[ "abc", "abcd", "cfgh", "abcdd"]
出参: "c"
入参: ["abc", "abcd", "bcfgh", "abcdd"]
出参: "bc"
入参: ["abc", "abcd", "cfgh", "bdd"]
出参: "null"