萌新刚学KMP求助
查看原帖
萌新刚学KMP求助
195331
Mine_KingCattleya楼主2021/5/24 21:36

Rt,只过了 Subtask0 和 Subtask2 的 #11,其他全部 WA 了,求大佬帮忙调一调e

//Luogu P3375
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
string s,t;
int nxt[1000005];
int main()
{
	cin>>s>>t;
	for(int i=1;i<(int)t.length();i++)
	{
		int now=nxt[i-1];
		while(t[now]!=t[i]&&now!=0) now=nxt[now-1];
		if(t[now]==t[i]) nxt[i]=nxt[now]+1;
		else nxt[i]=0;
	}
	for(int pos=0,now=0;now<(int)s.length();)
	{
		if(s[now]==t[pos]) now++,pos++;
		else if(nxt[pos-1]!=0) pos=nxt[pos-1];
		else now++;
		if(pos==(int)t.length())
		{
			printf("%d\n",now-pos+1);
			pos=nxt[pos-1];
		}
	}
	for(int i=0;i<(int)t.length();i++) printf("%d ",nxt[i]);
	return 0;
}

附:我学习 KMP 看的文章:https://www.ruanx.net/kmp/

2021/5/24 21:36
加载中...