Write Program to find longest common contiguous intersection from 2 lists provided to the function.
Example:
list1: abcrfghwetf
list2: abrfghwwetxyab
Longest common intersection here is: fghwNeed Effecient Algorithm to implement this in Java or C, not using arrays.
此题是2月29号amazon招聘暑期实习生的面试题
用LCS的思想来考虑此题,只需要给LCS加一些限制条件
int longest = 0; public Set<String> getLCS(String s1, String s2) { if(s1 == null || s2 == null) return null; int len1 = s1.length(), len2 = s2.length(); int[][] array = new int[len1 + 1][len2 + 1]; Set<String> substrings = new TreeSet<String>(); for(int i = 0; i < len1; i++) { for(int j = 0; j < len2; j++) { if(s1.charAt(i) == s2.charAt(j)) { int v = array[i][j] + 1; array[i + 1][j + 1] = v; if(v > longest) { longest = v; } if( v == longest) { substrings.add(s1.substring(i - v + 1, i + 1)); } } } } return substrings; }
但是,这样做的时间复杂度是O(m*n)
请大家想想有没有办法能把时间复杂度降到O(n)?