目錄
- 專欄導讀
- 一、題目描述
- 二、輸入描述
- 三、輸出描述
- 四、解題思路
- 五、Java算法源碼
- 六、效果展示
華為OD機試 2023B卷題庫瘋狂收錄中,刷題點這里
專欄導讀
本專欄收錄于《華為OD機試(JAVA)真題(A卷+B卷)》。
刷的越多,抽中的概率越大,每一題都有詳細的答題思路、詳細的代碼注釋、樣例測試,發現新題目,隨時更新,全天CSDN在線答疑。
一、題目描述
給定兩個只包含小寫字母的字符串,計算兩個字符串的最大公共子串的長度。
注:子串的定義指一個字符串刪掉其部分前綴和后綴(也可以不刪)后形成的字符串。
二、輸入描述
輸入兩個只包含小寫字母的字符串。
三、輸出描述
輸出一個整數,代表最大公共子串的長度。
四、解題思路
- 首先讀取輸入的兩個字符串;
- 將字符串長度較短的作為 s1,長度較長的作為 s2;
- 初始化最大公共子串的長度 n 為 0;
- 使用兩層循環遍歷 s1 的所有子串,從索引 i 開始到索引 j,其中 i 不大于 j;
- 在內層循環中,判斷 s2 是否包含當前子串,使用 contains 方法進行判斷;
- 如果 s2 包含當前子串,則更新最大公共子串的長度 n,取當前子串的長度(j - i)和 n 中的較大值;
- 如果找到了包含當前子串的情況,就可以跳出內層循環;
- 循環結束后,輸出最大公共子串的長度 n。
五、Java算法源碼
public static void main(String[] args) {Scanner in = new Scanner(System.in);String ss1 = in.nextLine();String ss2 = in.nextLine();String s1 = ss1.length() < ss2.length() ? ss1 : ss2;String s2 = ss1.length() < ss2.length() ? ss2 : ss1;int n = 0;for (int i = 0; i < s1.length(); i++) {for (int j = s1.length(); j > i; j--) {if (s2.contains(s1.substring(i, j))) {n = j - i > n ? j - i : n;break;}}}System.out.println(n);
}
六、效果展示
🏆下一篇:華為OD機試真題 Java 實現【簡易內存池】【2023 B卷 200分 考生抽中題】
🏆本文收錄于,華為OD機試(JAVA)真題(A卷+B卷)
刷的越多,抽中的概率越大,每一題都有詳細的答題思路、詳細的代碼注釋、樣例測試,發現新題目,隨時更新,全天CSDN在線答疑。