一个KMP算法(c++版)

时间:2021-03-11 19:59:44

不会算法的前端工程师无力吐槽,研究了一下午KMP。KMP啊 擦

 获取子串代码:

void GetNextEx(char *T, char *next)

  {

  int i=k,j=0; next[1] = 0;

  while(k < T[0])

  {

  if (j == 0 || T[k] == T[j])

  {

  ++k; ++j;

  if (T[k] == T[j])

  next[k] = next[j];

  else

  next[k] = j;

  }

  else j = next[j];

  }

  }

比较代码:

int KMP(char* S, char* T, int pos)

  {

  int k=pos, j=1;

  while (k){

  if (S[k] == T[j]){ ++k; ++j; }

  else j = next[j]

  }

  if (j>T[0]) return k-T[0];

  else return 0;

  }