例题4.7Oulipo

#include <iostream>
#include <cstring>
using namespace std;

int nextt[500000];
string nn,mm;

void GetNext(int m)
{
int i,j;
nextt[0]=-1;
i=-1;j=0;
    while(j<m)
if(i==-1||mm[i]==mm[j])
{
i++;j++;
nextt[j]=i;
}
else
{
i=nextt[i];
}
}

int KMP(int m,int n)
{
GetNext(m);
int i=0;//代表文本串 
int j=0;//代表模式串 
int count=0;//文本串中模式串的个数 
while(i<n)
{
if(nn[i]==mm[j]||j==-1)
{
j++;i++;
}
else
{
j=nextt[j];//这一句异曲同工
}
if(j==m)//一个模式串匹配成功
{
count++;

            j=nextt[j];//这一句异曲同工 
}
}
return count;
}
int main()
{
int num;cin>>num;
int n,m;
for(int i=1;i<=num;i++)
{
cin>>mm>>nn;
m=mm.size();
n=nn.size();
cout<<KMP(m,n)<<endl;
}

return 0; 
}
全部评论

相关推荐

嵐jlu:我是山川🐔里🐔🧱的,阿里系简历全过; 你这简历一看就还是半成品啊,没有荣誉经历奖项什么的吗?
投递阿里巴巴集团等公司10个岗位
点赞 评论 收藏
分享
风中翠竹:真的真的真的没有kpi。。。面试官是没有任何kpi的,捞是真的想试试看这个行不行,碰碰运气,或者是面试官比较闲现在,没事捞个人看看。kpi算HR那边,但是只有你入职了,kpi才作数,面试是没有的。
双非有机会进大厂吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务