KMP算法
来源:互联网 发布:中国移动网络测速网址 编辑:程序博客网 时间:2024/06/08 18:23
很明显,kmp算法需要先求出next数组
经过分析,next数组手工过程如下:
设子串为p
我们需要将子串的当前元素与前一个元素的下标对应的next的值为下标的元素比较,即
p[i] == p[next[i-1]]如果相等即,i++,next[i] = i;
若不相等,则分出两个情况。1、next[i-1] == 0 此时说明前面已经找不到可以匹配(再次利用)的子串,令next[i] = 0;
2、next[i-1] != 0 那么继续比较
p[i] == p[next[next[i-1]];
可简化 取一个变量 k ,k = next[i-1];
k = next[k];p[i] == p[k];最后直接给出求next数组的代码
int k = 0;int i = 1;while(p[i+1]) {if(p[i] == p[k]) {next[i++] = ++k;} else if(k > 0) {k = next[k];} else { next[k++] = 0;}}有了next数组后,一切变得简单了。
移动位数 = 已匹配的字符数 - 对应的部分匹配值
tar为源字符串,for (i = 0; i < tarLen; i++) {if(p[j] && p[j] == tar[i]) {j++;break;}if (!p[j]) {printf("[%d]", i - j);//打印输出结果} else {j = next[j];if (j == 0) {break;}}}怕以后又忘了。。。写篇博客。。记一下
阅读全文
0 0
- KMP算法详解 【KMP】
- 【KMP】KMP算法模板
- KMP hihoCoder1015 KMP算法
- kmp算法
- KMP算法
- KMP算法
- KMP算法
- KMP算法
- KMP 算法
- kmp算法
- KMP算法
- kmp算法
- KMP算法
- KMP算法
- kmp算法
- kmp算法
- KMP算法
- KMP算法
- Base64加密与解密
- javaweb_day7(JDBC)
- js 正则找出最长连续子串长度
- 模拟退火(SA)算法干货
- Ubuntu16.0 安装jdk配置Java环境的方法 (亲测可行)
- KMP算法
- 把字符串"abc.abc.abc"替换为"abc/abc/abc"
- 首次接触框架,struts2初步学习(随笔)
- 51Nod 1463 找朋友
- 【51Nod1685】第K大区间2
- 关于select...where params='' for update 阻塞的原因分析
- 常用排序算法1--冒泡排序,选择排序,插入排序
- AngularJS一系列筛选,添加、显示
- Opencv计算机视觉编程攻略笔记----第一章