找出两个字符串的最大公共子串。(如:abcdefg和abdefg的最大公共子串是defg)
有人给出以下两种思路:
1.以两个字符串c1c2为行列构成矩阵a,相同a[i][j]为1…最大就是斜方向连续1最多的(另一网友建议:如果2个字符串都很长 那个矩阵占用空间太大了啊,那个矩阵是一般来说是稀疏矩阵 考虑用稀疏矩阵的一些存储方式吧)
2.两个字符串c1c2,从大到小在c1中取子串,和c2匹配
3.数据结构 的KMP算法
这里先贴一下我按照第二个思路写的代码(这里仍然可以继续优化,比如遍历两个初始字符串中较短的那个):
public class MaxSameStr {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1 = "abcdefg";
String str2 = "abdefg";
System.out.println("the max same sub string is: " + getMaxSameStr(str1,str2));
}
public static String getMaxSameStr(String str1,String str2){
String maxSameStr = "";
String temp = "";
int len = str1.length();
for(int i=0;i<len;i++){
temp = str1.substring(i,len);
// if(str2.contains(temp)){
if(str2.indexOf(temp) != -1){
maxSameStr = temp;
break;
}
}
return maxSameStr;
}
}
这里有篇文章讲的很详细:
http://my.oschina.net/leejun2005/blog/117167