kmp
来源:互联网 发布:网络编辑是什么 编辑:程序博客网 时间:2024/06/05 05:41
继续拿之前的例子来说,当S[10]跟P[6]匹配失败时,KMP不是跟暴力匹配那样简单的把模式串右移一位,而是执行第②条指令:“如果j != -1,且当前字符匹配失败(即S[i] != P[j]),则令 i 不变,j = next[j]”,即j 从6变到2(后面我们将求得P[6],即字符D对应的next 值为2),所以相当于模式串向右移动的位数为j - next[j](j - next[j] = 6-2 = 4)。
向右移动4位后,S[10]跟P[2]继续匹配。为什么要向右移动4位呢,因为移动4位后,模式串中又有个“AB”可以继续跟S[8]S[9]对应着,从而不用让i 回溯。相当于在除去字符D的模式串子串中寻找相同的前缀和后缀,然后根据前缀后缀求出next 数组,最后基于next 数组进行匹配(不关心next 数组是怎么求来的,只想看匹配过程是咋样的,可直接跳到下文3.3.4节)。
在d处失配,而前面的匹配成功,可以利用pattern 串本身的对称行,将开头的ab 移过来 重新开始。
0 0
- KMP
- KMP
- KMP
- KMP
- KMP
- KMP
- kmp
- kmp
- KMP
- kmp
- KMP
- KMP
- KMP
- kmp
- KMP
- KMP
- kmp
- KMP
- 算法提高 最大乘积
- Ambarella处理器启动过程
- 编写一个函数,将一个数字字符串转换成这个字符串对应的数字(包括正浮点数、负浮点数)
- Excel Sheet Column Title
- MongoDB安装
- kmp
- Android—Android中 Your content must have a ListView whose id attribute is 'android.R.id.list'错误的解决办法
- Python之深浅拷贝
- kuangbinOJ 1220 - 老师的方程(模拟)
- C语言 编写一个c程序实现字符串到数字的转化
- 【翻译自mos文章】重新创建物理standby database 的 控制文件的方法
- BZOJ1101【莫比乌斯函数】
- RequestDispatche
- ubuntu系统如何屏幕截图