求两个字符串的最大长度子串,如:字符串"abcdefhellosadjvdb"与字符串"helloworld"的最大长度子串为"hello"
解题思路指定两个指针,分别指向长度最小的字符串的头部和尾部,然后依次遍历它的每个子串,长度最大的字符串通过调用contains(子串)来判断,如果返回值为true,则跳出循环,此时的子串即两个字符串的最大长度子串(思想类似求两个数的最大公约数)
代码实现public class StringDemo2 {
public String getMaxSameString(String str1, String str2) {
if (str1 == null || str2 == null) return null;
String maxString = (str1.length() >= str2.length()) ? str1 : str2;
String minString = (str1.length() < str2.length()) ? str1 : str2;
int length = minString.length();
for (int i = 0; i < length; i++) {
for (int x = 0, y = length - i; y <= length; x++, y++) {
String subStr = minString.substring(x, y);
if (maxString.contains(subStr)) return subStr;
}
}
return null;
}
public static void main(String[] args) {
StringDemo2 stringDemo2 = new StringDemo2();
System.out.println(stringDemo2.getMaxSameString("abcdefhellosadjvdb;", "helloworld"));
}
}
执行结果
D:JavaJDKbinjava.exe "-javaagent:D:IntelliJ IDEA 2019.3.3libidea_rt.jar=3297:D:IntelliJ IDEA 2019.3.3bin" -Dfile.encoding=UTF-8 -classpath D:JavaJDKjrelibcharsets.jar;D:JavaJDKjrelibdeploy.jar;D:JavaJDKjrelibextaccess-bridge-64.jar;D:JavaJDKjrelibextcldrdata.jar;D:JavaJDKjrelibextdnsns.jar;D:JavaJDKjrelibextjaccess.jar;D:JavaJDKjrelibextjfxrt.jar;D:JavaJDKjrelibextlocaledata.jar;D:JavaJDKjrelibextnashorn.jar;D:JavaJDKjrelibextsunec.jar;D:JavaJDKjrelibextsunjce_provider.jar;D:JavaJDKjrelibextsunmscapi.jar;D:JavaJDKjrelibextsunpkcs11.jar;D:JavaJDKjrelibextzipfs.jar;D:JavaJDKjrelibjavaws.jar;D:JavaJDKjrelibjce.jar;D:JavaJDKjrelibjfr.jar;D:JavaJDKjrelibjfxswt.jar;D:JavaJDKjrelibjsse.jar;D:JavaJDKjrelibmanagement-agent.jar;D:JavaJDKjrelibplugin.jar;D:JavaJDKjrelibresources.jar;D:JavaJDKjrelibrt.jar;D:JavaWorkSpaceJavaSenioroutproductionday04 com.atguigu.com.StringDemo2 hello Process finished with exit code 0改进-适用于两个字符串中有多个长度相等的最大长度子串
package com.atguigu.com;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class StringDemo2 {
public List getMaxSameString1(String str1, String str2) {
List list = new ArrayList<>();
if (str1 == null || str2 == null) return null;
String maxString = (str1.length() >= str2.length()) ? str1 : str2;
String minString = (str1.length() < str2.length()) ? str1 : str2;
int length = minString.length();
for (int i = 0; i < length; i++) {
for (int x = 0, y = length - i; y <= length; x++, y++) {
String subStr = minString.substring(x, y);
if (maxString.contains(subStr)) list.add(subStr);
}
if (list.size() != 0) break;
}
return list;
}
public static void main(String[] args) {
StringDemo2 stringDemo2 = new StringDemo2();
System.out.println(stringDemo2.getMaxSameString1("abcdefhellosadjvdb;", "helloworldabcde").toString());
}
}
执行结果
D:JavaJDKbinjava.exe "-javaagent:D:IntelliJ IDEA 2019.3.3libidea_rt.jar=3781:D:IntelliJ IDEA 2019.3.3bin" -Dfile.encoding=UTF-8 -classpath D:JavaJDKjrelibcharsets.jar;D:JavaJDKjrelibdeploy.jar;D:JavaJDKjrelibextaccess-bridge-64.jar;D:JavaJDKjrelibextcldrdata.jar;D:JavaJDKjrelibextdnsns.jar;D:JavaJDKjrelibextjaccess.jar;D:JavaJDKjrelibextjfxrt.jar;D:JavaJDKjrelibextlocaledata.jar;D:JavaJDKjrelibextnashorn.jar;D:JavaJDKjrelibextsunec.jar;D:JavaJDKjrelibextsunjce_provider.jar;D:JavaJDKjrelibextsunmscapi.jar;D:JavaJDKjrelibextsunpkcs11.jar;D:JavaJDKjrelibextzipfs.jar;D:JavaJDKjrelibjavaws.jar;D:JavaJDKjrelibjce.jar;D:JavaJDKjrelibjfr.jar;D:JavaJDKjrelibjfxswt.jar;D:JavaJDKjrelibjsse.jar;D:JavaJDKjrelibmanagement-agent.jar;D:JavaJDKjrelibplugin.jar;D:JavaJDKjrelibresources.jar;D:JavaJDKjrelibrt.jar;D:JavaWorkSpaceJavaSenioroutproductionday04 com.atguigu.com.StringDemo2 [hello, abcde] Process finished with exit code 0



