#1866. 字符串KMP算法-课堂案例1

字符串KMP算法-课堂案例1

题目描述

《KMP》

【KMP】 给出两个字符串 s1 和 s2,若 s1 的区间 [L,R] 子串与 s2 完全相同,则称 s2 在 s1中出现了,其出现位置为 L。现在请你求出 s2 在 s1 中所有出现的位置。s1 的区间位置L,R都从 1 开始。 定义一个字符串 s 的 border 为 s 的一个非 s 本身的子串 t,满足 t 既是 s 的前缀,又是 s 的后缀。 对于 s2,你还需要求出对于其每个前缀 s′的最长 border t′的长度。

输入格式

第一行为一个字符串,即为 s1。 第二行为一个字符串,即为 s2。

输出格式

首先输出若干行,每行一个整数,按从小到大的顺序输出 s2 在 s1 中出现的位置。 最后一行输出 s2 长度个整数,第 i 个整数表示 s2 的长度为 i 的前缀的最长 border 长度。

样例

输入样例 1

ABABABC
ABA

输出样例 1

1
3
0 0 1

输入样例 2

ABABABABA
ABA

输出样例 2

1
3
5
7
0 0 1

输入样例 3

AAAAAAAAAA
AAA

输出样例 3

1
2
3
4
5
6
7
8
0 1 2

输入样例 4

ABCDEFGHI
XYZ

输出样例 4

0 0 0