KMP求条
查看原帖
KMP求条
530468
_determination_楼主2023/11/3 10:53

RT

https://www.luogu.com.cn/record/133052728

#include<bits/stdc++.h>
#define int long long
using namespace std;
string s,t;
int kmp[1000010];
signed main()
{
	cin >> s >> t;
	int n=s.size(),m=t.size();
	for ( int i = 1 ; i < m ; i++ )
	{
		int j=kmp[i-1];
		while(j&&t[i]!=t[j])
		{
			j=kmp[j-1];
		}
		if(s[i]==s[j])
		{
			j++;
		}
		kmp[i]=j;
	 } 
	 int k=0;
	 for ( int i = 0 ; i < n ; i++ )
	 {
	 	while(k&&t[k]!=s[i])
	 	{
	 		k=kmp[k-1];
		 }
		 if(s[i]==t[k])
		 {
		 	k++;
		 }
		 if(k==m)
		 {
		 	cout << i-m+2 << endl;
		 	k=kmp[k-1];
		 }
	 }
	 for ( int i = 0 ; i < m ; i++ )
	 {
	 	cout << kmp[i] << " ";
	 }
	return 0;
}
2023/11/3 10:53
加载中...