首页 > 代码库 > poj 3461
poj 3461
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=1e6+5;int next[maxn],slen,tlen;char s[maxn],t[maxn];int kmp(){ int ans=0; for(int i=2,j=next[1]=0;i<=tlen;++i) { while(j&&t[i]!=t[j+1])j=next[j]; next[i]=j+=t[i]==t[j+1]; } for(int i=1,j=0;i<=slen;i++) { while(j&&s[i]!=t[j+1])j=next[j]; j+=s[i]==t[j+1]; if(j==tlen)j=next[j],ans++; } return ans;}int main(){ int T; scanf("%d",&T); while(T--) { scanf("%s%s",t+1,s+1); slen=strlen(s+1); tlen=strlen(t+1); printf("%d\n",kmp()); } return 0;}
poj 3461
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。