Trace
KMP字符串
传送门:https://www.acwing.com/problem/content/833/
Problem
给定一个模式串 S,以及一个模板串 P,所有字符串中只包含大小写英文字母以及阿拉伯数字。
模板串 P 在模式串 S 中多次作为子串出现。
求出模板串 P 在模式串 S 中所有出现的位置的起始下标。
输入格式
第一行输入整数 NN,表示字符串 PP 的长度。
第二行输入字符串 PP。
第三行输入整数 MM,表示字符串 SS 的长度。
第四行输入字符串 SS。
输出格式
共一行,输出所有出现位置的起始下标(下标从 0 开始计数),整数之间用空格隔开。
数据范围
1<=N<=1e5
1<=M<=1e6
输入样例:
1 | 3 |
输出样例:
1 | 0 2 |
暴力:
双指针,两层循环。
程序:
1 | #include <bits/stdc++.h> |
KMP
$next[i]=j$
字符串$p$为模板串, $p[1,j]=p[i-j+1]$,前缀与后缀相同且最长。