码迷,mamicode.com
首页 > 编程语言 > 详细

KMP算法

时间:2019-09-13 01:18:55      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:i++   har   ken   mes   kmp算法   show   图片   using   c++   

长文章:https://www.cnblogs.com/ZuoAndFutureGirl/p/9028287.html

板题:求子串在主串中出现的次数

技术图片
#include<bits/stdc++.h>
using namespace std;
const int M=1e6+6;
char S[M],T[M];
int nextt[M];
int ans=0;
void makeNext(){

    int m=strlen(T);
    nextt[0]=0;
    for (int i=1,j=0;i<m;i++){
        while(j>0&&T[i]!=T[j])
            j=nextt[j-1];
        if(T[i]==T[j])
           j++;
        nextt[i]=j;
    }
}
void kmp(){
    int n,m;
    n = strlen(S);
    m = strlen(T);
    makeNext();
    for (int i=0,q=0;i<n;i++){
        while(q>0&&T[q]!=S[i])
            q=nextt[q-1];
        if(T[q]==S[i])
            q++;
        if(q==m)
           ans++;
    }
}
 
 int main()
 {
     while(~scanf("%s%s",S,T))
     {
         ans=0;
        kmp();
        printf("%d\n",ans);
    }
    return 0;
}
View Code

 

KMP算法

标签:i++   har   ken   mes   kmp算法   show   图片   using   c++   

原文地址:https://www.cnblogs.com/starve/p/11515528.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!