思路:
1.首先对比两个串,找出长串和短串例如:长串是abcd,短串是abc 2.以短串为基准,循环查询子串,看长串里面是否包含该子串(从短串abc中找子串:ab,abc,bc三个,看这些子串是不是在长串 中abcd中) 3.把子串也在长串中的公共字符串都放入到集合list中存储 4.在循环对比list集合中的每一个字符串的长度,记住最长的一个的下标index 5.输出该下标对应的list.get(index) |
@Test
public void test1() {
String str1 = "111111aaabbbccceeeeffffffffggghhh99999999999999999abc777777777777777555555";
String str2 = "aabbbccccffggghheeaaaccbbbbcc999999999999999999999999ghg";
String shortStr = str1.length() > str2.length() ? str2 : str1;
String longStr = str1.length() > str2.length() ? str1 : str2;
int index = 0;//最长字串的下标,是再list集合中的位置
List list = new ArrayList();//新建一个集合来装我们的符合条件的字串
for (int i = 0; i < shortStr.length() - 2; i++) {//循环查找字串,
for (int j = i + 2; j < shortStr.length(); j++) {
String same = shortStr.substring(i, j);
if (longStr.indexOf(same) != -1) {
list.add(same);//将公共字串放入到集合中
}
}
}
System.out.println(list);//输出所有公共字串
int max = list.get(0).toString().length();//先假设集合中第一个串长度最长
int tempmax;//一个过渡变量
for (int i = 1; i < list.size(); i++) {
if ((tempmax = list.get(i).toString().length()) > max) {
max = tempmax;
index = i;//记住最长字串的再集合中的位置
}
}
System.out.println(list.get(index));//打印出该公共子串
}
控制台打印如下:
[aa, aab, aabb, aabbb, aabbbc, aabbbcc, aabbbccc, ab, abb, abbb, abbbc, abbbcc, abbbccc, bb, bbb, bbbc, bbbcc, bbbccc, bb, bbc, bbcc, bbccc, bc, bcc, bccc, cc, ccc, cc, ccc, cc, ff, ffg, ffgg, ffggg, ffgggh, ffggghh, fg, fgg, fggg, fgggh, fggghh, gg, ggg, gggh, ggghh, gg, ggh, gghh, gh, ghh, hh, ee, aa, aaa, aa, cc, bb, bbb, bb, bbb, bbbc, bbbcc, bb, bbc, bbcc, bc, bcc, cc, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, 9999999999, 99999999999, 999999999999, 9999999999999, 99999999999999, 999999999999999, 9999999999999999, 99999999999999999, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, 9999999999, 99999999999, 999999999999, 9999999999999, 99999999999999, 999999999999999, 9999999999999999, 99999999999999999, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, 9999999999, 99999999999, 999999999999, 9999999999999, 99999999999999, 999999999999999, 9999999999999999, 99999999999999999, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, 9999999999, 99999999999, 999999999999, 9999999999999, 99999999999999, 999999999999999, 9999999999999999, 99999999999999999, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, 9999999999, 99999999999, 999999999999, 9999999999999, 99999999999999, 999999999999999, 9999999999999999, 99999999999999999, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, 9999999999, 99999999999, 999999999999, 9999999999999, 99999999999999, 999999999999999, 9999999999999999, 99999999999999999, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, 9999999999, 99999999999, 999999999999, 9999999999999, 99999999999999, 999999999999999, 9999999999999999, 99999999999999999, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, 9999999999, 99999999999, 999999999999, 9999999999999, 99999999999999, 999999999999999, 9999999999999999, 99999999999999999, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, 9999999999, 99999999999, 999999999999, 9999999999999, 99999999999999, 999999999999999, 9999999999999999, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, 9999999999, 99999999999, 999999999999, 9999999999999, 99999999999999, 999999999999999, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, 9999999999, 99999999999, 999999999999, 9999999999999, 99999999999999, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, 9999999999, 99999999999, 999999999999, 9999999999999, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, 9999999999, 99999999999, 999999999999, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, 9999999999, 99999999999, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, 9999999999, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 99, 999, 9999, 99999, 999999, 9999999, 99, 999, 9999, 99999, 999999, 99, 999, 9999, 99999, 99, 999, 9999, 99, 999, 99, gh]
最长的公共字串为: 99999999999999999
最长的公共字串为: 99999999999999999