题解 | #公共子串计算#
公共子串计算
https://www.nowcoder.com/practice/98dc82c094e043ccb7e0570e5342dd1b
import java.util.Scanner;
/**
* 运行时间:38ms
* 超过70.05% 用Java提交的代码
* 占用内存:10824KB
* 超过76.75%用Java提交的代码
* @author xiaomingtongxue
* @create 2022-08-07-16:41
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()){
String s1 = sc.next();
String s2 = sc.next();
int res = maxSub(s1, s2);
System.out.println(res);
}
}
//动态规划解法
private static int maxSub(String s1, String s2) {
int len1 = s1.length();
int len2 = s2.length();
int[][] dp = new int[len1 + 1][len2 + 1];//dp表示当前位的最大公共子串
int max = 0;//用于追踪最大值
for (int i = 1; i < len1 + 1; i++) {
for (int j = 1; j < len2 + 1; j++) {
if (s1.charAt(i - 1) == s2.charAt(j - 1)){
dp[i][j] = dp[i - 1][j - 1] + 1;
max = Math.max(max, dp[i][j]);
}
}
}
return max;
}
}