[模板]sunday算法

Sunday算法时间复杂度比KMP低,并且逻辑也比KMP好理解, 但是NOIp基本不考

模板

其中A是主串,B是查找的模式串。

1
2
3
4
5
6
7
8
9
10
void (char* A, char* B) {
int len1 = strlen(A), len2 = strlen(B), last[128];
for(i = 0; i < 128; i++) last[i] = len2 + 1;
for(int i = 0; i < len2; i++) last[B[i]] = len - i; //这两行都是在求解last数组,即跳转的步数
int ind = 0; //当然是指匹配的位置啦JOJO
while(ind <= len1 - len2) {
if(strncmp(A + ind, B, len2) == 0) cout << ind << endl; //输出下标
ind += last[A[len + ind]]; //根据已求出的last数组跳转即可
}
}