题解 | #公共子串计算#
公共子串计算
https://www.nowcoder.com/practice/98dc82c094e043ccb7e0570e5342dd1b
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String a = br.readLine();
String b = br.readLine();
//使a为小串,减少循环次数
if (a.length() > b.length()) {
String temp = a;
a = b;
b = temp;
}
//1.此处使用标准的动态规划会使用n^2的时间和空间复杂度,不符合题目的进阶要求,需要使用n^3时间n空间复杂度
//2.原:dp[i][j]:a[i]及b[j]为尾的最长公共子串->dp[i][j]= a[i]==b[j]?dp[i-1][j-1]+1:0
//3.现:暴力求解,将a从大到小截取字符串与b对比,知道b包含截取的字符串为止
int max = 0;
//先循环需要截取的长度
for (int n = a.length(); n > 0; n--) {
//循环截取的起始下标
for (int j = 0; j < a.length() - n + 1; j++) {
if (b.contains(a.substring(j, j + n))) {
System.out.println(n);
return;
}
}
}
System.out.println(0);
}
}
查看9道真题和解析
