社区讨论

求助样例过了,测评就a三个

P3375【模板】KMP参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@locezye0
此快照首次捕获于
2023/10/30 12:43
2 年前
此快照最后确认于
2023/11/05 00:21
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
const int N=1e6;
char s1[N+5],s2[N+5];int next[N+5];
int main(){
	scanf("%s%s",&s1[1],&s2[1]);
	int len1 = strlen(s1+1);
	int len2 = strlen(s2+1);
	int cnt = 0;
	for(int i=2;i<=len2;i++){
		while(s2[cnt+1]!=s2[i]&&cnt){
			cnt = next[cnt];
		}
		if(s2[cnt+1]==s1[i]){
			cnt++;
		}
		next[i] = cnt;
	}
	cnt = 0;
	for(int i=1;i<=len1;i++){
		while(s2[cnt+1]!=s1[i]&&cnt){
			cnt = next[cnt];
		}
		if(s2[cnt+1]==s1[i]){
			cnt++;
		}
		if(cnt==len2){
			cout<<i-len2+1<<endl;
			cnt = next[cnt];
		}
	}
	for(int i=1;i<=len2;i++){
		cout<<next[i]<<" "; 
	}
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...