P3375(KMP)求助
  • 板块学术版
  • 楼主mutan
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/1 22:48
  • 上次更新2023/12/2 10:10:21
查看原帖
P3375(KMP)求助
749371
mutan楼主2023/12/1 22:48

rt,本地、洛谷在线IDE都能过,提交全RE,求调

#include <iostream>
#include <cstdio>
#include <string>

using namespace std;
string s1,s2;
int n,m;
int Next[1000002];
void findnext(string &s) {
	int j=0;
	for(int i=1;i<m;i++) {
		while(j > 0 && s[j] != s[i]) j = Next[j-1];
		if(s[j] == s[i]) j++;
		Next[i] = j;
	}
}
int main()
{
	int i,j;
	cin>>s1>>s2;
	n = s1.length();
	m = s2.length();
	findnext(s2);
	for(i=0;i<n;i++) {
		while(j > 0 && s2[j] != s1[i]) j = Next[j-1];
		if(s2[j] == s1[i]) j++;
		
		if(j == m) {
			cout<<i-m+2<<endl;
			j = Next[j-1];
		}
	}
	for(i=0;i<m;i++) {
		cout<<Next[i]<<' ';
	}
	cout<<endl;
	return 0;
}
2023/12/1 22:48
加载中...