70pts/subtask最后2个点WA了
查看原帖
70pts/subtask最后2个点WA了
1389794
Lei_ZT楼主2024/7/22 23:22
#include<bits/stdc++.h>
using namespace std;
char a[1000010],b[1000010];
long long la,lb,j;
long long kmp[1000010];//自动初始化为0 
int main(){
	cin>>a+1;
	cin>>b+1;
	la=strlen(a+1);
	lb=strlen(b+1);//输入2个字符串 
	j=0;//对匹配字符的下标进行初始化 
	for(int i=2;i<=lb;i++){
		while(j&&b[j+1]!=b[i])//未匹配到重复的字符,判断j是否为0是防止跳到0后依然跳
			j=kmp[j];
		if(b[i]==b[j+1]){//如果匹配成功 
			j++; 
		} 
		kmp[i]=j;
	}
	j=0;
	for(int i=1;i<=la;i++){
		if(j>0&&a[i]!=b[j+1]){
			j=kmp[j];
		}//如果不匹配则往回跳
		if(b[j+1]==a[i]){
			j++;
		} 
		if(j==lb){
			cout<<i-lb+1<<endl;
			j=kmp[j];//重新开始接着搜索下一个满足要求的位置 
			//当前这次B串在A串中出现的位置 
		}//搜完了 
	}
	for(int i=1;i<=lb;i++){
		cout<<kmp[i]<<" ";
	}
	return 0;
}
2024/7/22 23:22
加载中...