题解 | #公共子串计算#
公共子串计算
https://www.nowcoder.com/practice/98dc82c094e043ccb7e0570e5342dd1b
import java.util.Scanner;
import java.util.TreeSet;
// 方法一利用 1.contains函数判定子串是否存在 2.利用substring函数截取子串
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
String str1 = in.nextLine();
String str2 = in.nextLine();
TreeSet<String> vals=new TreeSet<String>();
String min=new String();
String max=new String();
int sum=0;
if (str1.length()>str2.length()) {
min=str2;
max=str1;
}else {
min=str1;
max=str2;
}
for (int i = 0; i < min.length(); i++) {
for (int j = i ; j <min.length(); j++) {
if(max.contains(min.substring(i,j+1))){
sum=Integer.max(sum,min.substring(i,j+1).length());
}
}
}
System.out.println(sum);
}
}
import java.util.Scanner;
import java.util.TreeSet;
// 方法二 动态规划
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
String str1 = in.nextLine();
String str2 = in.nextLine();
int max = 0;
int[][] dp = new int[str1.length() + 1][str2.length() + 1];
//初始化dp数组
for (int i = 1; i <= str1.length(); i++) {
for (int j = 1; j <= str2.length(); j++) {
if (str1.charAt(i - 1) == str2.charAt(j - 1)) {
dp[i][j] = 1;
} else {
dp[i][j] = 0;
}
}
}
for (int i = 1; i <= str1.length(); i++) {
for (int j = 1; j <= str2.length(); j++) {
if (str1.charAt(i - 1) == str2.charAt(j - 1)) {
dp[i][j] += dp[i - 1][j - 1];
max = Math.max(dp[i][j], max);
} else {
dp[i][j] = 0;
}
}
}
System.out.println(max);
}
}
华为OD机试 文章被收录于专栏
自己在准备机试,记录一下学习轨迹,主要参考真题,代码大部分是自己想的,不保证ac,仅供参考
传音控股公司福利 344人发布
