應用場景: 獲取兩個字符串全部公共的子串。
思路: 1. 先獲取兩個子串的交集
2. 遍歷交集子串,從最短子串到最長子串
public static List<String> getAllCommonSubStrings(String str1, String str2) { //TODO null check. String longString = str1; String shortString = str2; if(str1.length() < str2.length()){ longString = str2; shortString = str1; } List<String> result = new ArrayList<String>(); List<String> vacancy = new ArrayList<String>(); vacancy.add(""); List<String> list1 = Arrays.asList(shortString.split("")); List<String> list2 = Arrays.asList(longString.split("")); result.addAll(list1); result.retainAll(list2); result.removeAll(vacancy); List<String> commonSubStrings = new ArrayList<String>(); StringBuffer strBuf = new StringBuffer(); for(int i = 0; i < result.size()-1; i++){ strBuf = strBuf.append(result.get(i)); if(shortString.contains(strBuf + result.get(i+1)) && longString.contains(strBuf + result.get(i+1)) && i < result.size()-2){ continue; }else{ commonSubStrings.add(strBuf.toString()); strBuf = new StringBuffer(); } } String tail = commonSubStrings.get(commonSubStrings.size()-1)+ result.get(result.size()-1); if(shortString.contains(tail) && longString.contains(tail)){ commonSubStrings.set(commonSubStrings.size()-1, tail); }else{ commonSubStrings.add(result.get(result.size()-1)); } return commonSubStrings; }