public class BigestCommonSubString {
// 查找兩個字符串的最大相同子串,最大交集
public static void main(String[] args) {
String str1 = "asdfdfdfdfdfdfdfdfdfasf34lk343434343433333fdasfd";
String str2 = "asdfdfdfdfdfdfdfdfdf3434343434343jfshasdazlzlasbfasfdllzlz";
String targetString = getSubString(str1, str2);
System.out.println(targetString);
}
// 獲得最大相同子串,這個方法可以被外部調(diào)用
public static String getSubString(String str1, String str2) {
String targetString = null;
// 取出其中較短的字符串(照顧效率)
String shorter = str1.length() > str2.length() ? str2 : str1;
String longer = shorter.equals(str1) ? str2 : str1;
// 在較短的字符串中抽取其‘所有長度’的子串,順序由長到短
out:
for(int subLength = shorter.length(); subLength > 0; subLength--){
// 子串的起始角標由 0 開始右移,直至子串尾部與母串的尾部-重合為止
for(int i = 0; i+subLength <= shorter.length(); i++){
String subString = shorter.substring(i, i+subLength); // 取子串
if(longer.indexOf(subString) >= 0){ // 注意 ‘=’
targetString = subString;
break out; // 一旦滿足條件,則最大子串即找到,停止循環(huán),
}
}
}
return targetString;
}
}