获取两个字符串中最大相同子串

1,027 阅读1分钟
/**
 * 获取两个字符串中最大相同子串。比如:
 * str1="abcwerthehelloyuiodef" str2="cvhellobnm"
 */

public class StringDemo2 {
    /**
     * 提示:将短的那个串进行长度一次递减的子串与较长的串比较
     *      从长的开始找,没找到长度递减
     *      cvhellobnm 没找到 长度-1  cvhellobn vhellobnm 两种情况 依次查找
     * 该方法前提:两个字符串只有一个最大相同子串,要查询多个只需在本轮结束,用数组存储该轮相同子串
     * @param str1
     * @param str2
     * @return
     */
    public static String getMaxSameStr(String str1,String str2){
        if(str1!=null&&str2!=null){
            //判断长短串
            String maxStr=(str1.length()>=str2.length())?str1: str2;
            String minStr=(str1.length()<str2.length())?str1: str2;
            //获取短串的长度
            int length=minStr.length();
            //最外层为短串的轮数   列:子串'abc' "abc"  "ab""bc"  "a""b""c"
            for (int i = 0; i < length; i++) {
                //尾 为 length-第几轮  第一轮不减  第二轮-1 依次 y<=length
                for (int x=0,y=length-i;y<=length;x++,y++){
                    String subStr=minStr.substring(x,y);
                    //1.判断子串是否在长串中
                    if(maxStr.contains(subStr)){
                        return subStr;
                    }
                }
            }
        }
        return null;
    }
    public static void main(String[] args) {
        String maxSameStr = getMaxSameStr("abcwerthehelloyuiodef", "cvhellobnm");
        System.out.println(maxSameStr);//hello
    }
}