求助KMP全RE
  • 板块题目总版
  • 楼主DGFLSzfd
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/8/24 15:34
  • 上次更新2024/8/24 18:01:42
查看原帖
求助KMP全RE
981551
DGFLSzfd楼主2024/8/24 15:34

详细见这

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;

char tt[N],pp[N];


void getNext(char *p ,int *next)
{
	int n=strlen(p);
	next[0]=-1;
	int i=0,j=-1;
	while(i<n)
	{
		if(j==-1 or p[i]==p[j])
		{
			i++; j++;
			next[i]=j;
		}
		else 
			j=next[j];
	}
}
int nex[N];

int KMP(char *t, char *p)
{
	int i=0,j=0;
	int n=strlen(t),m=strlen(p);
	while(i<n and j<m)
	{
		if(j==-1 or t[i]==p[j])
		{
			i++;j++;
		}
		else 
			j=nex[j];
		if(j==m)
		{
			cout<<i-j+1<<endl;
			j=nex[j];
		}
			
	}
}
int main()
{
	
	cin>>tt>>pp;
	
	getNext(pp,nex);
	KMP(tt,pp);
	
	int m=strlen(pp);
	
	for(int i=1;i<=m;i++)
		cout<<nex[i]<<' ';
}
2024/8/24 15:34
加载中...