华为OD机试 2024E卷题库疯狂收录中,刷题 点这里。
实战项目访问:http://javapub.net.cn/
专栏导读
本专栏收录于 《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》 。
刷的越多,抽中的概率越大,私信javapub,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。
查找两个字符串a,b中的最长公共子串
查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。 注:子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开!
数据范围:
字符串长度 1≤length≤300
进阶:
时间复杂度:O(n^3)
,空间复杂度: O(n)
输入描述:
输入两个字符串
输出描述:
返回重复出现的字符
示例1
输入
abcdefghijklmnop
abcsafjklmnopqrstuvw
输出
jklmnop
Java 编程
package cn.net.javapub.demo2.demo;
/**
* @author: shiyuwang
* @url: http://javapub.net.cn
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str1 = null;
while ((str1 = br.readLine()) != null) {
String str2 = br.readLine();
if (str1.length() < str2.length()) {
System.out.println(res(str1, str2));
} else {
System.out.println(res(str2, str1));
}
}
}
private static String res(String s1, String s2) {
char[] ch1 = s1.toCharArray();
char[] ch2 = s2.toCharArray();
int[][] cnt = new int[ch1.length + 1][ch2.length + 1];
int start = 0;
int max = 0;
for (int i = 0; i < ch1.length; i++) {
for (int j = 0; j < ch2.length; j++) {
if (ch1[i] == ch2[j]) {
cnt[i + 1][j + 1] = cnt[i][j] + 1;
if (cnt[i + 1][j + 1] > max) {
max = cnt[i + 1][j + 1];
start = i + 1 - max;
}
}
}
}
return s1.substring(start, start + max);
}
}
展示效果:
🏆下一篇: 华为OD机试 - MP3光标位置 (Java 2024 E卷 100分)
🏆本文收录于, 搬砖工逆袭Java架构师
刷的越多,抽中的概率越大,私信javapub,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。
优质合集推荐
《突击面试》Java面试题合集
《面试1v1》
《编程工作总结》