与一本通提高组 P74 75,一毛一样。
出了啥子问题?
#include<bits/stdc++.h>
namespace k
{
std::string a,b;
int const maxn=10e6+1;
int next[maxn],la,lb,j;
void getnext()
{
j=0;
for (int i=1;i<lb;i++)
{
while(j>0&&b[i+1]!=b[j+1])
j=next[j];
if(b[j+1]==b[i+1])j++;
next[i+1]=j;
}
}
void kmp()
{
j=0;
for(int i=0;i<la;i++)
{
while(j>0&&b[j+1]!=a[i+1])
j=next[j];
if(b[j+1]==a[i+1])
j++;
if(j==lb)
{
std::cout<<i-lb+2<<std::endl;
j=next[j];
}
}
}
void main()
{
std::cin>>a>>b;
la=a.size();
lb=b.size();
getnext();
kmp();
for (int i=0;i<lb;i++)
std::cout<<next[i]<<" ";
}
}
int main()
{
k::main();
}