import java.util.*;
/**
* 请编码实现一个命令行工具,找出指定的2个字符串的最长公共子串。
* Create by DbL on 2020/1/9
*/
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
in.useDelimiter("\n");
String str = in.next();
findCommonString(str);
}
/**
* 命令行工具接收两个字符串参数。输入字符串的合法字符集为[a-zA-Z0-9],大小写敏感,无需考虑异常输入场景。
* 所找到的公共子串;如果存在多个等长的公共子串,则请按字母序排序,依次打印出所有公共子串,每行一个。
* 例:输入 1234567 12893457
* 输出 345
* @param str
*/
public static void findCommonString(String str){
//将输入的字符串以空格拆分成两个字符串
String[] strs = str.split(" ");
// 因无需考虑异常输入场景 直接取出下标为0和1的字符串
String str1 = strs[0];
String str2 = strs[1];
// 对得到的第一个字符串按长度进行拆分 并放到一个字符串集合里面
// 创建一个字符串集合用来存储第一个字符串能拆分的所有情况
List list_str1 = new ArrayList();
// 外层循环表示字符串长度
for (int i = 1; i
// 内层循环表示截取开始下标
for (int j = 0; j
list_str1.add(str1.substring(j,j+i));
}
}
// 将list中的字符串与str2进行比较
// 新建一个数组用来存放公共子串最长的值
String[] maxStrs = new String[0];
for (int i = 0; i
String substr = list_str1.get(i);
if(str2.contains(substr)){
// 如果maxStrs有值 取出第一个值的长度与当前字符串做对比,
// 如果比数组内字符串长度长则清空原来的数组将当前字符串存入
if(maxStrs.length>0 ){
if(maxStrs[0].length()
maxStrs = new String[0];
maxStrs = Arrays.copyOf(maxStrs,maxStrs.length+1);
maxStrs[maxStrs.length-1] = substr;
}
if(maxStrs[0].length()==substr.length()){
maxStrs = Arrays.copyOf(maxStrs,maxStrs.length+1);
maxStrs[maxStrs.length-1] = substr;
}
}else {
maxStrs = Arrays.copyOf(maxStrs,maxStrs.length+1);
maxStrs[maxStrs.length-1] = substr;
}
}
}
// 对数组进行去重操作,利用Set集合的不可重复性
Set set = new HashSet();
for(int i=0;i
set.add(maxStrs[i]);
}
Object[] finalStrs1 = set.toArray();
// 对最后得到的数组进行排序
Arrays.sort(finalStrs1);
// 输出结果
for (int i = 0; i
System.out.println(finalStrs1[i]);
}
}
}