最长公共子串

来源:互联网 发布:python 迭代器的方法 编辑:程序博客网 时间:2024/06/15 06:32

给定两个字符串,返回两个字符串的最长公共子串:

两个字符串长度分别为M,N;时间复杂度O(M*N),空间复杂度为O(1)

private static String lcst(String s1,String s2){    if(s1 == null || s1.length()==0 ||s2 == null || s2.length() == 0){        return "";    }    char[] arr1 = s1.toCharArray();    char[] arr2 = s2.toCharArray();    int max = 0;    int end = 0;    int row = 0,col = arr2.length-1;    while(row<arr1.length && col<arr2.length ){        int i= row;        int j = col;        int len=0;        while(i<arr1.length &&j<arr2.length){            if(arr1[i]==arr2[j]){                len++;            }else {                len=0;            }            if(len>max){                max = len;                end=i;            }            i++;            j++;        }        if(col>0){            col--;        }else {            row++;        }    }    return s1.substring(end-max+1,end+1);}