java实现求两个字符串的最长公共子字符串

来源:互联网 发布:淘宝公众号 编辑:程序博客网 时间:2024/05/21 11:20

    我的思想是遍历两个字符串,使用临时的stringbuffer存储查找过程中找到的子字符串,然后保存起来,一轮查找完成后,就和上次的保存的子字符串的长度进行比较,如果长,就更新保存的临时stringbuffer。此题要非常注意字符串的下标越界的情况发生。


package 求两个字符串之间的最长公共子串;


public class Test3 {


public static void main(String[] args) {
// TODO 自动生成的方法存根


String s1="adsjfjkhjfeefe";
//s1="shaohui";
String s2="huioiuyjifeefedwi";
//s2="ahui";

                if(s1.length()<s2.length()){//前一个字符串长度小于后一个的情况,则交换

                String s=s1;

                s1=s2;

                s2=s;

}
String s=fun(s1,s2);
System.out.println(s);
}


private static String fun(String s1, String s2) {
// TODO 自动生成的方法存根
if(s1==null||s2==null)
                 return null;
if(s1.length()==0||s2.length()==0)
                 return null;
int i,j,k=0;
StringBuffer sb=new StringBuffer();
StringBuffer sbTemp=new StringBuffer();
int max=0;
        for(i=0;i<s1.length();i++)
        for(j=0;j<s2.length();j++){        
        while(s1.charAt(i+k)==s2.charAt(j+k)){//此处注意下标越界
        sbTemp.append(s1.charAt(i+k));
        if(i+k<s1.length()-1&&j+k<s2.length()-1){//此处注意下标越界
        k++;
        }
        else
        {
        break;
        }
        }
            if(max<sbTemp.length()){
    max=sbTemp.length();
    sb.delete(0, sb.length());//sb清空
    sb.append(sbTemp.toString());         
    }
            k=0;
            sbTemp.delete(0, sbTemp.length());//sbTemp重新清空
        }
return sb.toString();
}


}


0 0