华为OD机试 - 公共子串计算(Java 2023 B卷 100分)-LMLPHP

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

华为OD机试 - 公共子串计算(Java 2023 B卷 100分)-LMLPHP

一、题目描述

给定两个只包含小写字母的字符串,计算两个字符串的最大公共子串的长度。

注:子串的定义指一个字符串删掉其部分前缀和后缀(也可以不删)后形成的字符串。

二、输入描述

输入两个只包含小写字母的字符串。

三、输出描述

输出一个整数,代表最大公共子串的长度。

四、解题思路

  1. 首先读取输入的两个字符串;
  2. 将字符串长度较短的作为 s1,长度较长的作为 s2;
  3. 初始化最大公共子串的长度 n 为 0;
  4. 使用两层循环遍历 s1 的所有子串,从索引 i 开始到索引 j,其中 i 不大于 j;
  5. 在内层循环中,判断 s2 是否包含当前子串,使用 contains 方法进行判断;
  6. 如果 s2 包含当前子串,则更新最大公共子串的长度 n,取当前子串的长度(j - i)和 n 中的较大值;
  7. 如果找到了包含当前子串的情况,就可以跳出内层循环;
  8. 循环结束后,输出最大公共子串的长度 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卷 100分)-LMLPHP


🏆下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

华为OD机试 - 公共子串计算(Java 2023 B卷 100分)-LMLPHP

08-17 02:08