KMP
因为某些原因,只好先搞KMP喽!
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s1[1000005],s2[1005];
int nxt[1005];
int main(){
scanf("%s%s",s1,s2);
int n=strlen(s1),m=strlen(s2);
int node=0;
for (int i=1;i<m;i++){
while (node&&s2[node]!=s2[i]) node=nxt[node-1];
if (s2[node]==s2[i]) node++;
nxt[i]=node;
}
node=0;
for (int i=0;i<n;i++){
while (node&&s2[node]!=s1[i])
node=nxt[node-1];
if (s2[node]==s1[i]) node++;
if (node==m){
node=nxt[node-1];
printf("%d\n",i-m+2);
}
}
for (int i=0;i<m;i++)
printf("%d ",nxt[i]);
return 0;
}