1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
public static void (String[] args){ String str1 = "BBC ABCDAB ABCDABCDABDE"; String str2 = "ABCDABD"; int[] next = kmpNext(str2); int index = kmpSearch(str1,str2,next); }
public static int kmpSearch(String str1,String str2,int[] next){ for(int i=0,j=0;i<str1.length();i++){ while(j>0 && str1.charAt(i) != str2.charAt(j)){ j = next[j-1]; } if(str1.charAt(i) == str2.charAt[j]){ j++; } if(j == str2.length()){ return i-j+1; } } return -1; }
public static int[] kmpNext(String dest){ int[] next = new int[dest.length()]; next[0]=0; for(int i=1,j=0;i<dest.length();i++){ while(j>0 && dest.charAt(i) != dest.charAt(j)){ j = next[j-1]; } if(dest.charAt(i) == dest.charAt(j)){ j++; } next[i] = j; } return next; }
|
近期评论