1. 程式人生 > 其它 >查詢子串KMP實現

查詢子串KMP實現

參考:KMP演算法詳解-徹底清楚了(轉載+部分原創)

KMP演算法求next,用動態規劃思想去理解

求next陣列,利用①回溯的方法、②動態規劃思路、③最長相等真前後綴減少回溯的方法

典範程式碼:

public int[] getNext(String p){
        int[] next = new int[p.length()];//p的最後一個元素不需要計算,用不到
        int j = 0;
        int k = -1;
        next[0] = -1;
        while(j<p.length()-1){
            if(k==-1||p.charAt(j)==p.charAt(k)){
                next[
++j] = ++k; }else{ k = next[k]; } } return next; } public int indexOf(String s,String p){ int m = s.length(),n = p.length(); int i=0,j=0; int[] next = getNext3(p); while(i<m&&j<n){ if(j==-1||s.charAt(i)==p.charAt(j)){ i
++;j++; }else{ j = next[j]; } } return j==n?i-j:-1; }