package String.lianxi;
import java.lang.*;
public class ClassDemo4 {
/**
* 获取两个字符串中最大的相同子串 s1="abcdhelloefg" s2="efhelloop" 得到hello
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1 = "abcdhelloefg";
String s2 = "efhelloop";
String s = getMaxstring(s1, s2);
System.out.println("最大子串是" + s);
}
private static String getMaxstring(String s1, String s2) {
// TODO Auto-generated method stub
String max = " ";
String min = " ";
max = (s1.length() > s2.length() ? s1 : s2);//三元运算符,传过来两个字符,把最大串和小串比较出来
min = (max == s1 ? s2 : s1);//大串是s1了,小串自然是s2
for (int i = 0; i <min.length(); i++) {//循环小串
for (int j = 0, z = min.length() - i; z!= min.length()+1; j++,z++) {
/*变量j是从开始截取 z是从未尾开始截取(因为是下标,所以要减i),条件这样写是因为比到超过这个长度就比完了,越界了
举例:s1="abhello" s2="fghello" 从fghello ghello fghell .....这样左减一个,右减一个比较,不会漏掉.....*/
String temp = min.substring(j, z);//然后截取
if (max.contains(temp)) {
return temp;
}
/*min = min.substring(j, z);//然后截取
if (max.contains(min)) {
return min;//我这样写,编译没有错,怎么输出是null呢?不理解,这样不也一样吗?
}*/
}
}
return null;
}
}
|