码迷,mamicode.com
首页 > 编程语言 > 详细

KMP算法

时间:2018-09-24 11:13:34      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:ext   pre   java   tail   []   href   tps   return   class   

看了一晚上才算看明白,明天继续看

从头到尾彻底理解KMP

public class KmpSearch {
    public static int indexOf(String s, String p) {
        if (p.length() == 0) return 0;
        int[] next = new int[p.length()];

        getNext(p, next);

        int i = 0;
        int j = 0;
        int sLen = s.length();
        int pLen = p.length();

        while (i < sLen && j < pLen) {
            if (j == -1 || s.charAt(i) == p.charAt(j)) {
                i++;
                j++;
            } else {
                j = next[j];
            }
        }

        if (j == pLen) {
            return i - j;
        } else {
            return -1;
        }
    }

    private static void getNext(String p, int[] next) {
        next[0] = -1;
        int j = 0;
        int k = -1;
        while (j < next.length - 1) {
            if (k == -1 || p.charAt(j) == p.charAt(k)) {
                j++;
                k++;
                next[j] = k;
            } else {
                k = next[k];
            }
        }
    }

    public static void main(String[] args) {
        int[] next = new int[5];
        getNext("ababc", next);
        System.out.println(indexOf("ababc","abc"));
    }
}

KMP算法

标签:ext   pre   java   tail   []   href   tps   return   class   

原文地址:https://www.cnblogs.com/acbingo/p/9694550.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!