社区讨论

KMP模板求调

学术版参与者 3已保存回复 6

讨论操作

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

当前回复
6 条
当前快照
1 份
快照标识符
@lo7jrsda
此快照首次捕获于
2023/10/27 02:58
2 年前
此快照最后确认于
2023/10/27 02:58
2 年前
查看原帖
rt
CPP
#include<bits/stdc++.h>
using namespace std;
int prefix[114514]={0,0};
string s1,s2;
int main()
{
	getline(cin,s1);
	getline(cin,s2);
	int j=0,n=s1.size(),m=s2.size();
	for(int i=2;i<=m;i++)
	{
		while(j>0&&s2[j+1]!=s2[i]) j=prefix[j];
		if(s2[j+1]==s2[i]) j++;
		prefix[i]=j;
	}
	for(int i=1;i<=m;i++) cout<<prefix[i]<<" ";
	j=0;
	for(int i=1;i<=n;i++)
	{
		while(j>0&&s2[j+1]!=s1[i]) j=prefix[j];
		if(s2[j+1]==s1[i]) j++;
		if(j==m) cout<<i-m+1<<endl,j=prefix[j];
	}
	for(int i=1;i<=m;i++) cout<<prefix[i]<<" ";
}

回复

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

正在加载回复...