✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)
文章目录
- 1、题目描述
- 2、输入描述
- 3、输出描述
- 4、Java算法源码
- 5. 测试
- 6.解题思路
1、题目描述
给定两个只包含小写字母的字符串,计算两个字符串的最大公共子串的长度。
注:子串的定义指一个字符串删掉其部分前缀和后缀(也可以不删)后形成的字符串。
2、输入描述
输入两个只包含小写字母的字符串。
3、输出描述
输出一个整数,代表最大公共子串的长度。
4、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);
}
5. 测试
6.解题思路
- 首先读取输入的两个字符串。
- 将字符串长度较短的作为 s1,长度较长的作为 s2。
- 初始化最大公共子串的长度 n 为 0。
- 使用两层循环遍历 s1 的所有子串,从索引 i 开始到索引 j,其中 i 不大于 j。
- 在内层循环中,判断 s2 是否包含当前子串,使用
contains
方法进行判断。 - 如果 s2 包含当前子串,则更新最大公共子串的长度 n,取当前子串的长度(j - i)和 n 中的较大值。
- 如果找到了包含当前子串的情况,就可以跳出内层循环。
- 循环结束后,输出最大公共子串的长度 n。