基于next数组的KMP源码

来源:互联网 发布:wamp mysql 乱码 编辑:程序博客网 时间:2024/04/29 17:31
对于书上介绍的KMP算法的源码,如有问题欢迎评论指出。
#include <iostream>#include <string>using namespace std;void getNext(char *s, int *next){int sLen = strlen(s);int j = 0;int k = -1;next[0] = -1;while(j < sLen - 1){if(s[j] == s[k] || k == -1){++j;++k;if(s[j] == s[k])next[j] = k;elsenext[j] = next[k];  //再次进行的递归}elsek = next[k];}}int KMPSearch(char *p,char *s,int *next){int pLen = strlen(p);int sLen = strlen(s);int i = 0;int j = 0;while(i < sLen && j < pLen){if(s[i] == p[j] || j == -1){++i;++j;}elsej = next[j];}if(j == pLen)return i - j + 1;elsereturn -1;}int main(){char *s = "abcdfacdeabdfdsa";char *p = "abd";int next[50];getNext(s,next);cout << KMPSearch(p,s,next) << endl;getchar();return 0;}

0 0
原创粉丝点击