题目描述
查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。
示例
输入
abcdefghijklmnop abcsafjklmnopqrstuvw
输出
jklmnop
思路
- 首先,先找出比较短的那个字符串,长串为a,短串为b;
- 截取b(由短到长),每截取一部分,就判断这部分在a中是否包含;
- 如果不包含,则break;如果包含,则判断当前截取子串是否比之前保存的最长子串长,如果长,则将当前最长子串替换为截取子串;
- 重复步骤2
代码
import java.util.Scanner;
public class Main {
public static String getMaxSubStr(String a, String b) {
// 先找出最短的那个字符串
if (a.length() < b.length()) {
String c = a;
a = b;
b = c;
}
// 用于保存最长公共子串
String subStr = "";
// 查找子串
for (int beginIndex = 0; beginIndex < b.length(); beginIndex++) {
for (int endIndex = beginIndex; endIndex < b.length(); endIndex++) {
String s = b.substring(beginIndex, endIndex + 1);
if (a.indexOf(s) == -1) {
break;
} else if (s.length() > subStr.length()) {
subStr = s;
}
}
}
return subStr;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String a = in.nextLine();
String b = in.nextLine();
System.out.println(getMaxSubStr(a, b));
}
}
}