转自: http://hi.baidu.com/defeat2001/blog/item/29f760258294c921d507421d.html
public class BigestCommonSubString {
// 查找两个字符串的最大相同子串,最大交集
public static void main(String[] args) {
String str1 = "asdfdfdfdfdfdfdfdfdfasf34lk343434343433333fdasfd";
String str2 = "asdfdfdfdfdfdfdfdfdf3434343434343jfshasdazlzlasbfasfdllzlz";
String targetString = getSubString(str1, str2);
System.out.println(targetString);
}
// 获得最大相同子串,这个方法可以被外部调用
public static String getSubString(String str1, String str2) {
String targetString = null;
// 取出其中较短的字符串(照顾效率)
String shorter = str1.length() > str2.length() ? str2 : str1;
String longer = shorter.equals(str1) ? str2 : str1;
// 在较短的字符串中抽取其‘所有长度’的子串,顺序由长到短
out:
for(int subLength = shorter.length(); subLength > 0; subLength--){
// 子串的起始角标由 0 开始右移,直至子串尾部与母串的尾部-重合为止
for(int i = 0; i+subLength <= shorter.length(); i++){
String subString = shorter.substring(i, i+subLength); // 取子串
if(longer.indexOf(subString) >= 0){ // 注意 ‘=’
targetString = subString;
break out;
// 一旦满足条件,则最大子串即找到,停止循环,
}
}
}
return targetString;
}
}
转自: http://www.blogjava.net/renyangok/archive/2007/03/05/101934.html
/**/ /*
求两个字符串的最大公共子串
String s1 = "abcdefghigj";
String s2 = "xyzabcdeigj";
则输出abcde
*/
public class Test
{
public String search(String s1,String s2)
{
String max = "" ;
for ( int i = 0 ; i < s1.length(); i ++ )
{
for ( int j = i + 1 ; j <= s1.length(); j ++ )
{
String sub = s1.substring(i,j);
if ((s2.indexOf(sub) != - 1 ) && sub.length() > max.length())
{
max = sub;
}
}
}
return max;
}
public static void main(String[] args)
{
String s1 = " abedafghigj " ;
String s2 = " xyzabfddfigj " ;
String output = new Test().search(s1,s2);
System.out.println(output);
}
}