【模板】KMP字符串匹配
题号:NC232778
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给出两个只含大写英文字母的字符串 s_1s_2,若 s1 的区间子串与 s_2 完全相同,则称s_2s_1 中出现了,其出现位置为l
现在请你求出 s_2s_1 中所有出现的位置。

定义一个字符串 s 的 border 为 s 的一个s本身的子串t,满足 t 既是 s 的前缀,又是 s 的后缀。
对于 s_2,你还需要求出对于其每个前缀 s' 的最长 border t' 的长度。

输入描述:

第一行为一个字符串,即为 s_1
第二行为一个字符串,即为 s_2

输出描述:

首先输出若干行,每行一个整数,按从小到大的顺序 输出 s_2s_1 中出现的位置

最后一行输出 个整数,第 i 个整数表示 s_2 的长度为 i 的前缀的最长 border 长度。
示例1

输入

复制
ABABABC
ABA

输出

复制
1
3
0 0 1

备注:

题目来源:https://www.luogu.com.cn/problem/P3375