题解 | #公共子串计算#
公共子串计算
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,仅供参考