求救kmp
  • 板块灌水区
  • 楼主lccve
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/7/22 17:29
  • 上次更新2023/11/3 08:14:01
查看原帖
求救kmp
525302
lccve楼主2023/7/22 17:29

kmp字符串匹配:

#include<bits/stdc++.h>
using namespace std;
string t,p;
int next_bool[1000001];
int next_ycl(int mode)
{
	next_bool[1]=0;
	int i=1;
	int j=0;
	while(i<mode)
	{
		if(p[i]==p[j])
			next_bool[++i]=++j;
		else if(j==0)
			next_bool[++i]=j;
		else{
			j=next_bool[j+1];
		}
	}
}
void kmp(int modet,int modep){
	int i=0,j=0;
	while(i<modet)
	{
		if(t[i]==p[j])
		{
			i++;
			j++;
		}
		else if(j==0) i+=1;
		else
		{
			if((i+modep-j)>=modet) return;
			else j=next_bool[j+1];
		}
		if(j==modep){
			 cout<<i-j+1<<endl;
			 j=0;
			 i=i-modep+2;	
		}
	}
}
int main(){
	cin>>t>>p;
	next_ycl(p.size());
	kmp(t.size(),p.size());
	for(int i=1;i<=p.size();i++)
		cout<<next_bool[i]<<" ";
}

做出来不是re 就是 tle,但是我真不知道哪里内存爆了,就是最简单的数据也会爆。自己尝试用string 写出来的与题解都不一样,真的很痛苦

2023/7/22 17:29
加载中...