4.3.3 KMP算法 下

    技术2022-07-11  72

    KMP算法特点是,为了避免回退,就设计了失败后,将子串指针向前回退的next数组

    本章是设计next数组

    设计思想

    因为当k位不匹配的时候,前1~k-1位是匹配的

    所以需要寻找前k位以前的前缀和后缀是否匹配

    前缀,包含第一个字符,不包含最后一个字符的子串

    后缀:包含最后一个字符,且不包含第一个字符的子串

    当j匹配失败时候,将前面已匹配的串记为S,next[j] = S的最长相等前后缀 +1

    规定next[1] = 0

    总结:

    如果是第一个不匹配,则返回到0,i,j各+1

    然后在前面的已经匹配好的子串中,寻找长度相等的前后缀,前后缀并且相等,

    next值为前后缀长度 + 1

    特点声明next[1] = 0

    KMP时间复杂度

    1,时间来源于构造next数组,时间复杂度O(n)

    2,遍历主串,时间复杂度O(m)

    3,总体时间复杂度为O(m+n)

    特点:

    next[1] = 0

    next[0] = 1

    比朴素优秀的前提是,前面的子串和模式串部分匹配

    Processed: 0.010, SQL: 9