社区讨论
求助样例过了,测评就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 条回复,欢迎继续交流。
正在加载回复...