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的主要内容,如果未能解决你的问题,请参考以下文章