1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
* 获取两个字符串中最大相同子串。比如:
* str1="abcwerthehelloyuiodef" str2="cvhellobnm"
*/

public class StringDemo2 {
/**
* 提示:将短的那个串进行长度一次递减的子串与较长的串比较
* 从长的开始找,没找到长度递减
* cvhellobnm 没找到 长度-1 cvhellobn vhellobnm 两种情况 依次查找
* 该方法前提:两个字符串只有一个最大相同子串,要查询多个只需在本轮结束,用数组存储该轮相同子串
* @param str1
* @param str2
* @return
*/
public static String getMaxSameStr(String str1,String str2){
if(str1!=null&&str2!=null){
//判断长短串
String maxStr=(str1.length()>=str2.length())?str1: str2;
String minStr=(str1.length()<str2.length())?str1: str2;
//获取短串的长度
int length=minStr.length();
//最外层为短串的轮数 列:子串'abc' "abc" "ab""bc" "a""b""c"
for (int i = 0; i < length; i++) {
//尾 为 length-第几轮 第一轮不减 第二轮-1 依次 y<=length
for (int x=0,y=length-i;y<=length;x++,y++){
String subStr=minStr.substring(x,y);
//1.判断子串是否在长串中
if(maxStr.contains(subStr)){
return subStr;
}
}
}
}
return null;
}
public static void main(String[] args) {
String maxSameStr = getMaxSameStr("abcwerthehelloyuiodef", "cvhellobnm");
System.out.println(maxSameStr);//hello
}
}