求救,过不了
查看原帖
求救,过不了
910683
mocmc楼主2023/9/9 20:15
#include<iostream>
using namespace std;

static string s1;
static string s2;
static int m_next[1000010];
int main()
{
	cin >> s1;
	cin >> s2;




	for (int i = 1, j = 0; i < s2.size(); i++)
	{
		while (j && s2[i] != s2[j])j = m_next[j];
		if (s2[i] == s2[j])j++;
		m_next[i] = j;

	}
	int j = 0;
	for (int i = 0; i < s1.size(); i++)
	{
		while (j && s2[j] != s1[i])
		{
			j = m_next[j];
		}
		if (s2[j] == s1[i])
		{
			j++;
		}
		if (j == s2.size())
		{
			cout << i + 2 - s2.size() << endl;
			j = m_next[j - 1];
		}

	}
	for (int i = 0; i < s2.size(); i++)
	{
		cout << m_next[i] << " ";
	}
	return 0;
}
2023/9/9 20:15
加载中...