又水了一篇
题目链接:https://www.luogu.com.cn/problem/P3375
#include
using namespace std;
int Next[1000010]={0};
void getNEXT(string str)
{
Next[0] = -1;
int i=-1, j=0;
while(j < str.size())
{
if(i==-1 || str[j]==str[i])
{
i++;
j++;
Next[j] = i;
}
else i = Next[i];
}
}
void KMP(string str1, string str2)
{
int i=0, j=0;
int len1=str1.size(), len2=str2.size();
while(i<len1)
{
if(j==-1 || str1[i]==str2[j])
{
i++;
j++;
}
else j = Next[j];
if(j == len2)
{
cout<<i-j+1<>s1>>s2;
getNEXT(s2);
KMP(s1, s2);
for(int i=1; i<=s2.size(); i++)
cout<<Next[i]<<" ";
return 0;
}