kmp求调
查看原帖
kmp求调
1080250
littleFond楼主2024/11/5 19:06
#include<bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
const int N=1e6+10;
int n,m;
int p[N];
string s1,s2;
void pre(){
	int j=0;
	for(int i=1;i<m;i++){
		while(j>0&&s2[j+1]!=s2[i+1])j=p[j];
		if(s2[j+1]==s2[i+1])j++;
		p[i+1]=j;
	}
}
void kmp(){
	int j=0;
	for(int i=0;i<n;i++){
		while(j>0&&s2[j+1]!=s1[i+1])j=p[j];
		if(s2[j+1]==s1[i+1])j++;
		if(j==m){
			cout<<i+1-m+1<<"\n";
			j=p[j];
		}
	}
}
signed main(){
	cin>>s1>>s2;
	s1=' '+s1;
	s2=' '+s2;
	n=s1.length()+1;
	m=s2.length()+1;
	pre();
	kmp();
	for(int i=1;i<m-1;i++){
		cout<<p[i]<<' ';
	}
	return 0;
}

kmp出错,p数组对的

2024/11/5 19:06
加载中...