这是一道字符串拆解的问题,抓住一个核心是交集字串的最大的长度,所以算法实现的时候要从最长字串来截取。
核心思路:
1、判断两个字符串的长度,确定拆解短的那个字符串。
2、截取子符串的 步长从拆解串的最大长度开始,依次减1
3、循环获取子串,同时判断长字符串是否包含子串,由于我们是以最大步长开始截取,所以第一遇到满足条件的子串就是我们需要的结果
具体java代码实现如下:
public class SameSubStr {
public static void main(String[] args) {
String sameSubStr = getSameSubStr("abcdsadwwwwwffff", "cdwww");
System.out.println("sameSubStr====="+sameSubStr);
}
public static String getSameSubStr(String a,String b){
String result = null;
String splitStr = null;
String longStr = null;
if(a.length()<=b.length()){
splitStr = a;
longStr = b;
}else{
splitStr = b;
longStr = a;
}
int len = splitStr.length();
for (int l=len+1;l>0;l--){
int start =0;
int end = l;
while (end<=len){
String subStr = splitStr.substring(start,end);
start++;
end=start+l;
System.out.println(subStr+"-->"+longStr.contains(subStr));
if (longStr.contains(subStr)){
return subStr;
}
}
}
return result;
}
}