#include<bits/stdc++.h>
using namespace std;
string a,b;
int x,n,m,nxt[1000001];
void buildnext(){
int i=1,j=-1;
nxt[0]=-1;
while(i<m){
if(j==-1||b[i]==b[j]){
i++,j++;
nxt[i]=j;
}else j=nxt[j];
}
}int kmp(){
int i=0,j=0;
while(i<n&&j<m){
if(j==-1||a[i]==b[j])i++,j++;
else j=nxt[j];
}return j==m?i-j:-1;
}int main(){
cin>>a>>b;
n=a.size();m=b.size();
buildnext();
x=kmp();
while(x!=-1){
a.erase(a.begin()+x,a.begin()+x+m);
x=kmp();
}cout<<a;
return 0;
}
好 我看看
怎么都没人啊。。。
只能请人来调了QAQ
@我命由我不由天 @yhxyd0109 @stringdp100005
啊,虽然我看了,但我不会啊,还没学
全剧终(bushi
还有谁能帮我调一下
本蒟蒻还是太菜了
啊?蓝题
不会
你不是做出黑题了吗?而且还是提高组的巨佬
你找找蓝题里面有没有这题
好吧没有一个
我不会 KMP
#include<iostream>
#include<vector>
using namespace std;
int kmp(string a,string b){
int i=1,j=-1,n=a.size(),m=b.size();
vector<int>next={-1};
while(i<m){
if(j==-1||b[i]==b[j]){
i++,j++;
next.push_back(j);
}else j=next[j];
}i=j=0;
while(i<n&&j<m){
if(j==-1||a[i]==b[j])i++,j++;
else j=next[j];
}return j==m?i-j:-1;
}int main(){
string a,b;
cin>>a>>b;
cout<<kmp(a,b);
return 0;
}
板子给出来了
建议看题解吧
好吧
但是题解我看不懂