KMP算法中getNext()函数的步骤

77 阅读1分钟
        int j = -1;
        next[0] = j;
        for (int i = 1; i < s.size(); i++) {
            while (j >= 0 && s[i] != s[j + 1]) {
                j = next[j];
            }
            if (s[i] == s[j + 1]) {
                j++;
            }
            next[i] = j;
        }
    }

KMP算法最重要的还是求得next数组的函数,上面是代码随想录给出的一种getNext()函数的实现代码,大致上可以分为三步走。

  1. 第一步是初始化,定义j并让next数组的第一个元素等于初始的j。
  2. 第二步是考察前后缀不等时的情况,让前缀末尾的j回退,即j=next[j]。
  3. 第三步是考察前后缀相等时的情况,只要让j前进就可以了(i在循环中前进),同时此时next[i]的元素要赋值为j,因为此时已经找到了相等的前后缀。