Java教程

KMP算法 next数组模板

本文主要是介绍KMP算法 next数组模板,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
        void preKMP(String s, int kmpNext[]) {
        int len = s.length();
        int k, j;
        k = kmpNext[0] = -1;
        j = 0;
        while (j < len - 1) {
            if (k == -1 || s.charAt(j) == s.charAt(k)) {
                if (s.charAt(++j) == s.charAt(++k)) {
                    kmpNext[j] = kmpNext[k];
                } else {
                    kmpNext[j] = k;
                }
            } else {
                k = kmpNext[k];
            }
        }
    }

表示匹配的时候,j 下次前移的位置

    public int strStr(String haystack, String needle) {
        if (needle.length() == 0) return 0;
        int[] next = new int[needle.length()];
        preKMP(needle, next);
        int i = 0, j = 0;
        while (i < haystack.length() && j < needle.length()) {
            if (j == -1 || haystack.charAt(i) == needle.charAt(j)) {
                i++;
                j++;
            } else {
                j = next[j];
            }
        }
        if (j == needle.length()) {
            return i - j;
        } else {
            return -1;
        }
    }

 

这篇关于KMP算法 next数组模板的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!