1343 - 字符串匹配
时间限制 : 1 秒
内存限制 : 128 MB
给出两个字符串s1和s2,若s1的区间[l, r]子串与s2完全相同,则称s2在 s1中出现了,其出现位置为l。现在请你求出s2在s1中所有出现的位置。
定义一个字符串s的 border 为s的一个非s本身的子串t,满足t既是s的前缀,又是s的后缀。
对于s2,你还需要求出对于其每个位置的最长 border的长度。
输入
第一行为一个字符串,即为s1。
第二行为一个字符串,即为s2。
对于全部的测试点,保证1<=|s1|,|s2|<=10^6。
输出
输出若干行,每行一个整数,按从小到大的顺序输出s2在s1中出现的位置。
最后一行输出|s2|个整数,第i个整数表示s2的长度为i的前缀的最长 border 长度。
样例
输入
ABABABC ABA
输出
1 3 0 0 1
提示
样例解释:
对于s2长度为3的前缀ABA,字符串A既是其后缀也是其前缀,且是最长的,因此最长border长度为1。