一个上课考试题,考试的时候给我整得一脸懵逼。一个时间不够,二个没睡醒沙雕了【狗头 】【狗头 】【狗头 】
上代码
public static String findMaxString(String s1, String s2){
String longString = s1.length() > s2.length() ? s1 : s2;
String shortString = s1.length() > s2.length() ? s2 : s1;
for (int i = shortString.length() - 1; i >= 0; i--){
for (int j = 0; j < i; j++) {
String temp = shortString.substring(j, i);
if (longString.contains(temp)){
return temp;
}
}
}
return null;
}
- 先找到两个字符串中短的那个
- 以短的字符串去控制外层循环,且是从后往前遍历
- 内层循环从前往后
- 用substring(j,i)截取字符串并赋值给一个临时的字符串变量
- 将临时的子串与长的字符串进行比较
- 当临时的子串包含在长字符串时,得到最大子串
原理:
String s1 = "abcdefgabcdabcd";
String s2 = "lalabcdabcdtq";
第一次外层循环:
临时子串:lalabcdabcdtq与abcdefgabcdabcd相比较
第一次内层循环:lalabcdabcdtq与abcdefgabcdabcd相比较
第二次内层循环:alabcdabcdtq与abcdefgabcdabcd相比较
第三次内层循环:labcdabcdtq与abcdefgabcdabcd相比较
...
...
第二次外层循环:
临时子串:lalabcdabcdt与abcdefgabcdabcd相比较
...
...
由于没找到昨天看的那个博主的博客,虽然复制了代码,但是不敢随意引用【狗头 】【狗头 】【狗头 】