KMP算法

KMP算法_第1张图片

next[j]前面的字符和j前面的字符是相同的。
当不匹配时,i不移动,j向前指向next[j]。此时再对s1[i]和s2[j]进行比较即可,前面的已经匹配了。

int kmp(string s, string p, vector next){
  int slen=s.length(), plen=p.length();
  int i=0,j=0;
  while(i

求next[]:

KMP算法_第2张图片
vector getNext(string p){
  int len=p.length();
  vector next(len,0);
  next[0]=-1;//第一个元素就不匹配,j不能往前跳了,将其设为-1,作为一个标记
  int i=0,j=next[i]; 

  while(i

你可能感兴趣的:(KMP算法)