WA求助,感谢
  • 板块P3375 【模板】KMP
  • 楼主Ryoo
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/11/26 18:22
  • 上次更新2024/11/26 20:20:57
查看原帖
WA求助,感谢
1100140
Ryoo楼主2024/11/26 18:22
#include <bits/stdc++.h>
using namespace std;
char a[1000005], b[1000005];
int nexts[1000005],ans[1000005];
int main() {
	int cnt = 0;
	scanf("%s", a+1);
	scanf("%s", b+1);
	int blen = strlen(b+1),alen = strlen(a+1);
	nexts[1] = 0;
	int ll = 1, matchnum = 0;
	for(int i = 2; i <= blen; i++) {
		while(matchnum > 0 && b[ll] != b[i]) matchnum = nexts[matchnum];
		if(b[ll] == b[i]) matchnum++;
		//matchnum++;
		nexts[i] = matchnum;
	}
	int mnum = 0;
	for(int i = 1; i <= alen; i++) {
		while(mnum > 0 && (b[mnum+1] != a[i] || mnum == blen)) {
			mnum = nexts[mnum];
		}
		if(b[mnum+1] == a[i]) mnum++;
		if(mnum == blen) {cnt++;ans[cnt] = i-blen+1;}
		//if(a[pot] == b[i]) {mnum++;pot++;}
		
	}
	for(int i = 1; i <= cnt; i++) printf("%d\n", ans[i]);
	for(int i = 1; i <= blen; i++) printf("%d ", nexts[i]);
	return 0;
}
2024/11/26 18:22
加载中...