#include <bits/stdc++.h>
using namespace std;
vector<int> ycl;
vector<int> KMP_ycl(const string& b) {
int m=b.size();
vector<int> ycl(m,0);
int len=0;
int i=1;
while(i<m){
if(b[i]==b[len]) {
len++;
ycl[i]=len;
i++;
}else{
if(len!=0){
len=ycl[len-1];
}else{
ycl[i]=0;
i++;
}
}
}
return ycl;
}
vector<int> KMP(const string& a,const string& b) {
vector<int> s;
int n=a.size();
int m=b.size();
if (m==0) return s;
vector<int> ycl=KMP_ycl(b);
int i=0;
int j=0;
while (i<n) {
if (b[j]==a[i]) {
j++;
i++;
}
if (j==m) {
s.push_back(i-j);
j=ycl[j-1];
} else if (i<n && b[j]!=a[i]) {
if(j!=0) {
j=ycl[j-1];
}else{
i++;
}
}
}
return s;
}
int main() {
string a;
string b;
cin>>a>>b;
vector<int> ans=KMP(a,b);
if (ans.empty()) {
return 0;
} else {
for (int pos : ans) {
cout<<pos+1<<"\n";
}
}
vector<int> ycl=KMP_ycl(b);
for(auto qwq : ycl){
cout<<qwq<<' ';
}
return 0;
}
检查了半天也没发现什么问题,求条