/**
* 编程获取两个指定字符串中的最大相同子串
* 如:str1="asdafghjka", str2="aaasdfg" 他们的最大子串为"asd"
* 提示:让较短字符串依次递减,并要求每次递减之后的子字符串连续, 这样就能找出str2的全部子串
* str2 7个字符 索引:0-6 aaasdfg
* str2 6个字符 索引:0-5 aaasdf 1-6 aasdfg
* str2 5个字符 索引:0-4 aaasd 1-5 aasdf 2-6 asdfg
* str2 4个字符 索引:0-3 aaas 1-4 aasd 2-5 asdf 3-6 sdfg
* str3 3个字符 索引:0-2 aaa 1-3 aas 2-4 asd 3-5 sdf 4-6 dfg
* str2 2个字符 索引:0-1 aa 1-2 aa 2-3 as 3-4 sd 4-5 df 5-6 fg
* str2 1个字符 索引:0 a 1 a 2 a 3 s 4 d 5 f 6 g
*/
public class job2Test {
static String minStr;
static String maxStr;
static String subMinStr;// minStr的子字符串
public static String test(String str1, String str2) {
// 判断str1和str2哪个是较短的字符串
if (str1.length() < str2.length()) {
minStr = str1;
maxStr = str2;
} else {
minStr = str2;
maxStr = str1;
}
System.out.println("maxStr: " + maxStr + ", " + "minStr: " + minStr);
// 找出相同的最长子字符串
boolean flag=true;
for (int i = 0; i < minStr.length(); i++) { // i 控制行数
if (!flag) break;
System.out.print("subMinStr: ");
for (int j = 0; j <= i; j++) {// j 控制每一行的列数及str2字符串开始下标
// subStr2是str2所有可能的子字符串
subMinStr = minStr.substring(j, minStr.length() - i + j); // minStr.length()-i+j 控制str2字符串结束下标
System.out.print(subMinStr + " ");
if (maxStr.contains(subMinStr)) { // 如果maxStr包含了minStr或者minStr的子字符串,那么就结束循环
flag = false;
break;
}
}
System.out.println();
}
return subMinStr;
}
public static void main (String[]args){
String MaxSubStr = test("asdafghjka", "aaasdfg");
System.out.println("相同的最大字符串是:" + MaxSubStr);
}
}
运行结果:
"F:\Program Files\JDK\JDK11\bin\java.exe" "-javaagent:F:\Program Files\IDEA\IntelliJ IDEA .1.1\lib\idea_rt.jar=14247:F:\Program Files\IDEA\IntelliJ IDEA .1.1\bin" -Dfile.encoding=UTF-8 -classpath "F:\Program Files\drag hook\Big Data\Project\java\javase\out\production\javase" com.lagou.model3.job.job2Test
maxStr: asdafghjka, minStr: aaasdfg
subMinStr: aaasdfg
subMinStr: aaasdf aasdfg
subMinStr: aaasd aasdf asdfg
subMinStr: aaas aasd asdf sdfg
subMinStr: aaa aas asd
相同的最大字符串是:asd
Process finished with exit code 0
5