给定两个字符串,返回两个字符串的最长公共子串:
两个字符串长度分别为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); }