获取两个字符串中最大相同子串。比如:str1 = “abcwererhelloyossaa”;str2 = “asdahashelloasggada”;
提示:将短的那个字符串进行长度依次递减的子串与较长的串比较。
思路:
找最大相同字符串,那么这个字符串最大不可能超过二者中小的那一个。
找出两个字符串短的那一个,设置两个下标(一个控制从前面去,一个控制从后面去),逐步缩小范围
只有一个最大相同字符串
public String getMaxSameString(String str1,String str2){
if(str1 != null && str2 != null) {
String maxString = (str1.length() >= str2.length()) ? str1 : str2;
String minString = (str1.length() < str2.length()) ? str1 : str2;//不加等号的原因,如果两个字符串长度相同,会取同一个字符串。
for (int i = 0; i < minString.length(); i++) {
for (int x = 0, y = minString.length() - i; y <= minString.length(); x++, y++) {
String subStr = minString.substring(x, y);
if (maxString.contains(minString)) {
return subStr;
}
}
}
}
return null;
}
有多个最大相同字符串
public String[] getMaxSameSubString1(String str1,String str2){
if(str1 != null && str2 != null) {
StringBuffer sBuffer = new StringBuffer();
String maxString = (str1.length() >= str2.length()) ? str1 : str2;
String minString = (str1.length() < str2.length()) ? str1 : str2;//不加等号的原因,如果两个字符串长度相同,会取同一个字符串。
for (int i = 0; i < minString.length(); i++) {
for (int x = 0, y = minString.length() - i; y <= minString.length(); x++, y++) {
String subStr = minString.substring(x, y);
if (maxString.contains(minString)) {
sBuffer.append(subStr + ",");
}
}
//表示已经找到最大字符串了
if(sBuffer.length() != 0){
break;
}
}
String[] split = sBuffer.toString().replaceAll(",$","").split("\\,");
return split;
}
return null;
}