# 下载的数据答案是对的,为什么不能过?QWQ请大佬帮帮忙。
查看原帖
# 下载的数据答案是对的,为什么不能过?QWQ请大佬帮帮忙。
591280
xhzscott楼主2022/3/10 17:54
#include<bits/stdc++.h>
using namespace std;
string a,b;
int n[100010],t;
void zao()
{
	int i=1,j=0;
	n[1]=0;
	while(i<=t)
	{
		if(j==0||b[i]==b[j])
		{
			i++;
			j++;
			n[i]=j;
		}
		else
		{
			j=n[j];
		}
	}
} 
int main()
{
	getline(cin,a);
	getline(cin,b);
	t=b.size();
	for(int i=t;i>=1;i--)
	{
		b[i]=b[i-1];
	}
	t++;
	b[t]='A';
	zao();
	int i=0,j=1;
	n[1]=1;
	for(int i=0;i<a.size();i++)
	{
		if(a[i]==b[j])
		{
			if(j==t-1)
			{
				cout<<i-j+2<<endl;
				i=i+1-j;
				j=1;
				if(i+t>=a.size())
				{
					break;
				}
			}
			else
			{
				j++;
			}
		}
		else
		{
			j=n[j];
		}
	}
	for(int i=2;i<=t;i++)
	{
		cout<<n[i]-1<<" ";
	}
	return 0;
}
2022/3/10 17:54
加载中...