題目描述
查找兩個字符串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));
}
}
}