社区讨论
kmp求调
P3375【模板】KMP参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m34cjhjy
- 此快照首次捕获于
- 2024/11/05 19:08 去年
- 此快照最后确认于
- 2024/11/05 20:08 去年
C
#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数组对的
回复
共 1 条回复,欢迎继续交流。
正在加载回复...