就是一个直接套模板的题,如果KMP不会的话可以先看我的前一篇博客学一下,地址:https://blog.csdn.net/qq_43227036/article/details/98848443
AC代码:
#include <iostream>
#include <string>
using namespace std;
const int MAX_N = 500001;
int Next[MAX_N];
string s, p;
void GetNext()
{
int k=-1, j=0;
Next[0] = -1;
while (j < p.size())
{
if (k == -1 || p[j] == p[k])
{
k++;
j++;
Next[j] = k;
}
else
{
k = Next[k];
}
}
}
int KMP()
{
int i=0, j=0;
int cnt = 0;
int sLen = s.size();
int pLen = p.size();
while (i < sLen && j < pLen)
{
if (j == -1 || s[i] == p[j])
{
i++;
j++;
}
else
{
j = Next[j];
}
if (j == p.size())
{
cnt ++;
j = 0;
}
}
return cnt;
}
int main()
{
while (cin >> s && s[0] != '#')
{
cin >> p;
GetNext();
cout << KMP() << endl;
}
return 0;
}