例题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; 
}
全部评论

相关推荐

07-07 11:33
江南大学 Java
已经在暑假实习了&nbsp;,没有明确说有hc,纠结实习到八月份会不会有点影响秋招毕竟感觉今年好多提前批
程序员小白条:92的话准备提前批,其他没必要,没面试机会的,而且你要准备充分,尤其八股和算法题
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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