KMP WA+TLE求助
查看原帖
KMP WA+TLE求助
464732
luqyou楼主2023/1/8 16:00
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int next[10000001];
queue<int> ans;
void kmp(string s1,string s2){
	int len1=s1.size(),len2=s2.size();
	int i=0,j=0;
	while(i<len1){
		if(s1[i]==s2[j]){
			i++;
			j++;
		}
		else if(j>0){
			j=next[i-1];
		}
		else{
			i++;
		}
		if(j==len2){
			ans.push(i-j+1);
			j=next[i-1];
		}
	}
} 
string a,b; 
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>a>>b;
	int len=b.size(),z=0;
	next[0]=0;
	for(int i=1;i<len;i++){
		if(b[z]==b[i]){
			next[i]=next[i-1]+1;
			z++; 
		}
		else{
			z--;
			z=next[z];
			if(b[z]==b[i]){
				next[i]=z+1;
			}
			else{
				next[i]=0;
			}
		}
	}
	kmp(a,b);
	while(ans.size()){
		cout<<ans.front()<<endl;
		ans.pop();
	}
	for(int i=0;i<len;i++){
		cout<<next[i]<<" ";
	}
	return 0;
}
2023/1/8 16:00
加载中...