这题明白思路就很好做了
公共子串计算
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);
}
}

