zoukankan      html  css  js  c++  java
  • kmp 模式匹配算法学习笔记

    模式匹配算法,就是给出两个字符串,找出长串中首次出现完全与短串相同字符串的位置。这里将长称成为主串,设为S,短串称模式串,设为T。

    一般的模式匹配可以直接用暴力破解,将S串与T串一位位地进行匹配,一旦出现不匹配的情况,就将S串回溯到原始出发点的下一位,将T串回溯到起点。暴力破解的问题在于,遇到子串中有重复字符前后缀的时候,会出现不必要的回溯。此时就可用kmp算法提高效率。

    kmp算法的匹配算法和暴力破解差别不很大,但是这里不对S串进行回溯,只对T串进行回溯。而next数组的作用就是指导在匹配失败时,T串应该回溯到什么位置。

    next数组的长度和T串相同,这里的下标从1开始,它的计算规则是:next[1] = 0; next[i] 的值,由T[1]~T[i-1]位置的字符串决定,值为这一段字符串中的前缀和后缀相同的位数加1;在没有相同的前缀后缀时,置1。

    示例:“ababaaaba” 011234223、“abcabx” 011123 、“aaaaab” 012345

  • 相关阅读:
    BZOJ5311,CF321E 贞鱼
    POJ3208 Apocalypse Someday
    POJ1037 A decorative fence
    POJ1737 Connected Graph
    CF559C Gerald and Giant Chess
    NOI2009 诗人小G
    Problem 2726. -- [SDOI2012]任务安排
    POJ1821 Fence
    HDU5542 The Battle of Chibi
    POJ2376 Cleaning Shifts
  • 原文地址:https://www.cnblogs.com/jason31/p/9558481.html
Copyright © 2011-2022 走看看