问题 J: 8.2.2.2 KMP字符串匹配
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:143
解决:175
题目描述
给定两个字符串s1和s2,若s1的[l,r]区间的子串与s2完全相同,则称s2在s1中出现了,其出现位置为l。请求出s2在s1中所有出现的位置。定义一个字符串s的border为s的一个非s本身的子串t,求满足t既是s的前缀,又是s的后缀。对于s2,还需要求出对于其每个前缀的最长border的长度。
输入
输入为2行,第1行为字符串s1,第2行为字符串s2。1<=|s1|,|s2|<=10e6,字符串只含大写英文字母。
输出
首先输出若干行,每行一个整数,按从小到大的顺序输出s2在s1中出现的位置。最后一行输出|s2|个整数,第i个整数表示s2的长度为i的前缀的最长border的长度。
样例输入 复制
ABABABC
ABA
样例输出 复制
1
3
0 0 1