首页 > 其他 > 详细

字符串匹配——KMP

时间:2020-09-12 16:57:34      阅读:48      评论:0      收藏:0      [点我收藏+]

KMP
暴力算法:
S:较长的串,p较小的串,需要在S中查询的串

for(int i=1;i<=n;i++){//从s[i]开始匹配p 
  bool flag=true;
  for(int j=1;j<=m;j++)
    if(s[i+j-1]!=p[j]){
      flag=false;
      break;
     } 
  }

 

next[i]:表示以i为终点的后缀和从1开始的前缀相等,并且后缀的长度最长
next[i]=j:表示p[1,j]=p[i-j+1,i]

KMP匹配过程

for(int i=1,j=0;i<=m;i++){//字符串s,p都是从1开始 
  while(j&&s[i]!=p[j+1]) j=ne[j];//当下一个位置不相等时,j就往前退,也就是p整体右移;j=0表示退无可退 
  if(s[i]==p[j+1]) j++; 
  if(j==n){
    //匹配成功 
  }
}

 

求next

ne[1]=0;
for(int i=2,j=0;i<=n;i++){
  while(j&&p[i]!=p[j+1]) j=ne[j];
  if(p[i]==p[j+1]) j++;
  ne[i]=j;
}

 

注:这里的代码都是从1开始,也就是cin>>p+1>>s+1;

写于:2020/9/12 15:58

 

字符串匹配——KMP

原文:https://www.cnblogs.com/sunjianzhao/p/13657353.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!