Java求兩個字符串的最長公共子串,這個是華為OJ上的一道題目。首先,如果我們用java寫代碼,華為OJ有以下三條規則需遵守,否則編譯無法通過或者用例無法通過,規則如下:
(1)一定不可以有包名;
(2)主類名只能為Main;
(3)不可以輸出與結果無關的信息。
好了,按照以上規則,我們寫出來的代碼如下(此代碼不是最優的,只是用來記錄華為OJ上java代碼的書寫規則):
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Main mainObj = new Main();
int len = mainObj.getCommonStrLength(sc.next(),sc.next());
System.out.println(len);
}
int getCommonStrLength(String str1, String str2) {
str1 = str1.toLowerCase();
str2 = str2.toLowerCase();
int len1 = str1.length();
int len2 = str2.length();
String min = null;
String max = null;
String target = null;
min = len1 <= len2 ? str1 : str2;
max = len1 > len2 ? str1 : str2;
//最外層:min子串的長度,從最大長度開始
for (int i = min.length(); i >= 1; i--) {
//遍歷長度為i的min子串,從0開始
for (int j = 0; j <= min.length() - i; j++) {
target = min.substring(j, j + i);
//遍歷長度為i的max子串,判斷是否與target子串相同,從0開始
for (int k = 0; k <= max.length() - i; k++) {
if (max.substring(k,k + i).equals(target)) {
return i;
}
}
}
}
return 0;
}
}