这题明白思路就很好做了
公共子串计算
https://www.nowcoder.com/practice/98dc82c094e043ccb7e0570e5342dd1b
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main2 { public static void main(String[] args) { Scanner in = new Scanner(System.in); String string1 = in.next(); String string2 = in.next(); // 确保string1为短字符串 if (string1.length() > string2.length()) { String temp = string1; string1 = string2; string2 = temp; } char[] charArray1 = string1.toCharArray(); char[] charArray2 = string2.toCharArray(); int maxCount = 0; // 遍历短串 for (int i = 0; i < charArray1.length; i++) { int maxNum = 0; // 遍历长串 for (int k = 0; k < charArray2.length; k++) { char c1 = charArray1[i]; char c2 = charArray2[k]; if (c1 == c2) { // 注意此处要每次置为1开始 int count = 1; // 两个串从当前位置开始往后一直比较 int currentIndex1 = i; int currentIndex2 = k; while (true) { // 注意索引越界,两个串只要有其中之一到了末尾,退出比较 if(currentIndex1 == charArray1.length - 1 || currentIndex2 == charArray2.length - 1){ break; } if (string1.charAt(++currentIndex1) == string2.charAt(++currentIndex2)) { count++; }else { // 下个位置不相等了退出循环 break; } } // 该层每次都会有一个最大值,交换到外部 if (count > maxNum){ maxNum = count; } } } // 上面的内层for循环每次会出来一个最大值,因此需置换到最外层 // 如果是比之前相等的串长度大,替换 if (maxNum > maxCount){ maxCount = maxNum; } } System.out.println(maxCount); } }