子串查找
题目链接:子串查找
题目描述
解题思路
这就是一道 k m p kmp kmp 模板题,可以自行在网上找题解。
code
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
string a,b;
int n,m,ans;
int nxt[1000010];
void qnxt()
{
nxt[0]=-1;
int now=-1,t=0;
while(t<m)
{
if(now==-1||b[now]==b[t])
now++,t++,nxt[t]=now;
else
now=nxt[now];
}
}
void kmp()
{
int j=-1;
for(int i=0;i<n;i++)
{
while(j>-1&&b[j+1]!=a[i])
j=nxt[j];
if(b[j+1]==a[i])
j++;
if(j==m-1)
ans++,j=nxt[j];
}
}
int main()
{
cin>>a>>b;
n=a.size();
m=b.size();
qnxt();
kmp();
cout<<ans<<endl;
}