关于kmp模板

发布时间 2023-12-04 19:47:34作者: 泥薯

那个求p串的next数组 这个版本是下标从1开始的字符串,如果从0开始的话,可以在前面加空字符,然后p.size或者s.size的地方-1即可。

nex[1]=0      

for(int i=2,j=0;i<=p.size();i++)

{  

  if(j&&p[i]!=p[j+1])j=nex[j];

  if(p[i]==p[j+1])j++;

  nex[i]=j;

}

 

kmp函数

for(int i=1,j=0;i<=s.size();i++)

{

  if(j&&s[i]!=p[j+1])j=nex[j];

  if(s[i]==p[j+1])j++;

  if(j==p.size())

  {  

    那么此时在s串中模式串p的起始下标就是i-p.size()+1.

    返回即可。

  }  

}