KMP算法实现
来源:互联网 发布:网络人肉违法 编辑:程序博客网 时间:2024/05/01 02:13
#include<iostream>using namespace std;void getnext(char *p, int next[ ]) { next[0] = -1; int j = 0, k = -1; int len = strlen(p); next[0] = -1; while (j < len ) { if( k == -1 || p[k] == p[j]){ next[j+1] = k+1; j++;k++;}else{ k = next[k];} }}int KMP_help(char *T, char *P, int pos , int *next) //返回模式串P在目标串T中的位置{ int len_P = strlen(P); int len_T = strlen(T); int i = pos, j = 0; while (i < len_T && j < len_P) { if(j == -1) { i++;j = 0; } else if (P[j] == T[i]) { i++;j++; } else { j = next[j]; } } if(j < len_P ) return -1; else return i -j;} int KMP(char *T, char *P, int pos = 0){ int count = strlen(P); int *next = new int[count]; getnext(P,next); int result = KMP_help(T,P,pos,next); // delete [] next; //不知道为什么加上这个后,VC会报错,但编译能通过;Dev C++ 却没问题。 return result;}int main(){ char s1[20] = "xupengxjwhelloworld"; //主串 char s2[20] = "pengxjw"; cout<<KMP(s1,s2,0)<<endl; return 0;}
重点是如何求解next数组。参考:点击打开链接。这篇对KMP的讲解,个人认为是最好的。
求解next过程中,理解递归是重点。
- KMP算法及改进KMP算法实现
- [数据结构]KMP算法实现
- KMP算法的实现
- KMP算法实现
- KMP算法实现
- KMP 算法实现
- kmp算法实现
- KMP算法实现
- KMP算法和实现
- KMP算法实现
- KMP算法及实现
- KMP算法的实现
- KMP算法实现
- java实现kmp算法
- KMP算法C++实现
- KMP算法c++实现
- KMP算法java实现
- kmp算法实现
- dynamic_cast<>
- 分布式RMI多IP紊乱问题
- hdu_1565_方格取数(1)
- 32寄存器大全
- KMP算法详解
- KMP算法实现
- red5+ffmpeg
- Redis源码分析之事务
- OCM 考试说明
- poj 3070 Fibonacci
- zoj1665-Transport Goods
- 由于无法安装KB2670838导致无法安装IE10的原因及解决方法
- 课程设计--PCB板的设计
- 3好书1