求查错
  • 板块P3375 【模板】KMP
  • 楼主D2T1xubiaoshi
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/1/3 21:40
  • 上次更新2023/11/5 05:09:55
查看原帖
求查错
390770
D2T1xubiaoshi楼主2021/1/3 21:40
//P3375
#include <iostream>
#include <string>
using namespace std;
string s1,s2;
int next[1000005];

void getnext(){
	int l=s2.size();
	next[0]=0;
	for(int i=1,j=0; i<l; ++i){
		while(j && s2[j]!=s2[i]) j=next[j];
		if(s2[j]==s2[i]) ++j;
		next[i]=j;
	}
	return;
}
void kmp(){
	getnext();
	int l1=s1.size(),l2=s2.size(),last=-1;
	for(int i=0,j=0; i<=l1; ++i){
		while(j && s2[j]!=s1[i]) j=next[j];
		if(s2[j]==s1[i]) ++j;
		if(j==l2) cout << i-l2+2 << endl;
	}
	return;
}

int main(){
	cin >> s1 >> s2;
	kmp();
	for(int i=0; i<s2.size(); ++i)
		cout << next[i] << ' ';
	return 0; 
}

ABABA

ABA

这种就只能找到前面一个ABA,找不到后面的

2021/1/3 21:40
加载中...