应该先遍历小的字符串
查找两个字符串a,b中的最长公共子串
https://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String string1 = in.next(); String string2 = in.next(); String temp = ""; // 确保string2为最长串 if (string1.length() > string2.length()) { temp = string2; string2 = string1; string1 = temp; } char[] charArray1 = string1.toCharArray(); char[] charArray2 = string2.toCharArray(); String maxStr = ""; int maxCount = 0; for (int i = 0; i < charArray1.length; i++) { for (int k = 0; k < charArray2.length; k++) { char c1 = charArray1[i]; char c2 = charArray2[k]; int count = 0; String str = ""; if (c2 == c1) { StringBuilder builder = new StringBuilder(); builder.append(c1); count = 1; // 同步开始 int index1 = i; int index2 = k; while (true) { // 有一个达到尾部则结束下一个字符串比较 if (index1 == charArray1.length - 1 || index2 == charArray2.length - 1) { break; } char c = string2.charAt(++index2); // 下一个字符还是相等 if (c == string1.charAt(++index1)) { builder.append(c); count++; } else { // 两个字符串的下一个字符不相等,则结束 break; } } str = builder.toString(); } if (count > maxCount) { maxCount = count; maxStr = str; } } } System.out.println(maxStr); } }