求两个字符串的最大子串,利用好String类中的方法可以轻松解决这个问题。
思路:删减短串去和长串依次对比,利用String中的方法可以得到子串,但其中最重要的是怎样才能不漏掉子串。下面采用给子串“瘦身”来逐个对比。
- 第一次:直接看长串是否包含短串,是则直接返回短串;
- 第二次:短串长度-1,这时有两个子串,每个子串都去和长串对比,看是否包含;
- 第三次:短串长度-2,这时有三个子串
-。。。。。。。
外层循环控制短串长度,内层循环控制所有子串对比
涉及方法:length(),contains(),subString(),注意subString的参数是一个左闭右开的区间
实现代码:
public class StringTest {
public static void main(String[] args) {
String s1 = "nihaowoshizhaoyongchen";
String s2 = "zhaoyongchennishi";
String s3 = maxSubStr(s1, s2);
System.out.println(s3);
}
public static String maxSubStr(String s1, String s2) {
s1 = s1.length() > s2.length() ? s1 : s2;//长串
s2 = s1.length() <= s2.length() ? s1 : s2;//短串
for (int i = 0; i < s2.length(); i++) {//每次删掉一个短串字符
for (int start = 0, end = s2.length() - i; end <= s2.length(); start++, end++) {
//每一次符合长度条件的所有新短串都拿来对比
String temp = s2.substring(start, end);//左闭右开
if (s1.contains(temp))
return temp;
}
}
return "沒有找到";
}
}