#include<bits/stdc++.h>
#define int long long
using namespace std;
int ans[1000005],net[1000005];
string s,t;
void BuildNext(string s,int next[])
{
int len=0,i=1;
while(i<s.length())
if(s[len]==s[i])
len++,next[i]=len,i++;
else
if(!len)
i++;
else
len=next[len-1];
}
void KmpSearch(string s,string p,int next[],int ans[])
{
BuildNext(p,next);
int i=0,j=0,cnt=0;
while(i<(s.length()))
{
if(s[i]==p[i])
i++,j++;
else if(j>0)
j=next[j-1];
else i++;
if(j==p.length())
ans[cnt]=i-j+1,cnt++;
}
}
signed main()
{
int cnt=0;
memset(net,0,sizeof(net));
memset(ans,0,sizeof(ans));
cin>>s>>t;
KmpSearch(s,t,net,ans);
while(ans[cnt])
cout<<ans[cnt]<<"\n",++cnt;
cnt=0;
while(cnt<t.length())
cout<<net[cnt]<<" ",cnt++;
}
为何我的ans数组只有一个值?
还有 RE 是怎么回事?
(刚学没多久)