题解 | #公共子串计算#
公共子串计算
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; } }