题解 | #查找两个字符串a,b中的最长公共子串#
查找两个字符串a,b中的最长公共子串
http://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506
import java.util.*;
import java.lang.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//获取str1的所有子串 在str2中查找
//记录最大长度 子串index
String s = sc.nextLine();
String l = sc.nextLine();
if(s.length()>l.length()){
String temp = s;
s = l;
l = temp;//后输出的短 则 交换
}
ArrayList<String> list = new ArrayList<String>();
list = getAllChild(s);//取出短串的 子串
int maxlen = 0;
int maxindex = 0;
for(int i = 0;i < list.size();i++){
if(l.contains(list.get(i)) && list.get(i).length() > maxlen){//长串中存在它 且 长度大于最大
//只取大于 所以 会保证 串的先后顺序 因为串是按先后顺序存储的
maxlen = list.get(i).length();
maxindex = i;
}
}
System.out.println(list.get(maxindex));
}
public static ArrayList<String> getAllChild(String str){//取出所有的子串
ArrayList<String> list = new ArrayList<String>();
for(int i = 1; i <=str.length();i++){
for(int j = 0;j<str.length()-i+1;j++){
list.add(str.substring(j,j+i));
}
}
return list;
}
}