ecnu 3441 Kmp

Posted taming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ecnu 3441 Kmp相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>
using namespace std;

int kmp(string& t,string& p){   //从t中找p出现的次树
    int* next=new int[p.size()+5];
    next[0]=next[1]=0;
    int cnt=0,lent=t.size(),lenp=p.size();
    for(int i=1;i<lenp;i++){
        int j=next[i];
        while(j>0&&p[i]!=p[j])j=next[j];
        next[i+1]=p[i]==p[j]?j+1:0;
    }
    for(int i=0,j=0;i<lent;i++){
        while(j>0&&t[i]!=p[j])j=next[j];
        if(t[i]==p[j])j++;
        if(j==lenp){
            j=next[j];
            cnt++;
        }
    }
    return cnt;
}

int main(){
    string t,p;
    cin>>t;
    int n,u,l,r;
    cin>>n;
    while(n--){
        cin>>l>>r>>p;
        string sub(t.substr(l,r-l+1));
        int res=kmp(sub,p);
        cout<<res<<endl;
    }
}

 

以上是关于ecnu 3441 Kmp的主要内容,如果未能解决你的问题,请参考以下文章

[BZOJ 3441]乌鸦喝水

BZOJ4641基因改造 KMP

bzoj3441乌鸦喝水

稳先微WS3441/WS3442/WS3443非隔离低功耗IC

T^T online judge 3441

在ECNU校园网内搭建反向代理