1 第十三个点的输入数据我下载下来后啥也没有,我寻思就是空的呗?
2 我这为啥11 13超时呢?
之前的讨论中有同学说string可以通过本题?
大佬求教
#include <iostream>
#include <vector>
using namespace std;
vector<int>Next;
void getnext(string s){
int i=0;
int j=-1;
Next.resize(s.size());
Next[0]=-1;
while (i<s.size()) {
if(j==-1||s[i]==s[j]){
i++;
j++;
Next[i]=j;
}
else j=Next[j];
}
return;
}
int KMP(string S,string s,int k){
int m=S.size();
int n=s.size();
int i=0,j=k;
while (i<n&&j<m) {
if(i==-1||s[i]==S[j]){
i++;
j++;
}
else i=Next[i];
}
if(i==n) return j-i;
else return -1;
}
int main() {
string S;
string s;
cin>>S>>s;
getnext(s);
int n=0;
for (int i=0; ; i++) {
n=KMP(S,s,n);
if(n==-1) break;
cout<<++n<<endl;
}
int p=Next.size();
for (int i=1; i<=p; i++) {
cout<<Next[i]<<" ";
}
cout<<endl;
return 0;
}