KMP算法

来源:互联网 发布:数据分析网站 编辑:程序博客网 时间:2024/06/18 17:18
#include <iostream>using namespace std;void GetNext(char* p,int next[])  {      int pLen = strlen(p);      next[0] = -1;      int k = -1;      int j = 0;      while (j < pLen - 1)      {          //p[k]表示前缀,p[j]表示后缀          if (k == -1 || p[j] == p[k])           {              ++k;              ++j;              next[j] = k;          }          else           {              k = next[k];          }      }  }  int KmpSearch(char* s, char* p,int next[])  {      int i = 0;      int j = 0;      int sLen = strlen(s);      int pLen = strlen(p);      while (i < sLen && j < pLen)      {          //①如果j = -1,或者当前字符匹配成功(即S[i] == P[j]),都令i++,j++              if (j == -1 || s[i] == p[j])          {              i++;              j++;          }          else          {              //②如果j != -1,且当前字符匹配失败(即S[i] != P[j]),则令 i 不变,j = next[j]                  //next[j]即为j所对应的next值                    j = next[j];          }      }      if (j == pLen)          return i - j;      else          return -1;  }  int main(int argc, char* argv[]){char pat[]="kaka";char str[]="iamkaka";int next[7];GetNext(pat,next) ;cout<< KmpSearch(str, pat,next) ; return 0;}

0 0
原创粉丝点击