题目描述
查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。
注:子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开!
本题含有多组输入数据!
eg:
输入:
abcdefghijklmnop
abcsafjklmnopqrstuvw
输出:
jklmnop
以下是本篇文章正文内容,下面案例可供参考
解题思路
两个字符串,将str1
始终指向较短的那个
将str1
放进StringBuilder
中,再判断str2
当中有无StringBuilder
的字符,若有,将StringBuilder
的字符更新到result
,直到找到最长的公共字符串
代码如下
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine();
String str2 = sc.nextLine();
//让str1指向较短的那个
if (str1.length() <= str2.length()) {
compare(str1, str2);
} else {
compare(str2, str1);
}
}
public static void compare(String str1, String str2) {
String result = "";
for (int i = 1; i < str1.length(); i++) {
StringBuilder sb = new StringBuilder();
for (int j = i - 1; j < str1.length(); j++) {
if (str2.contains(sb.append(str1.charAt(j)))) {
if (sb.length() > result.length()) {
result = sb.toString();
}
}
}
}
System.out.println(result);
}
}