字符串匹配

期末考试前背一下qwq

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void () {
my_pi[1] = 0;
int k = 0;
for (int q = 2; q <= m; ++q) {
while (k && p[k] != p[q - 1])
k = my_pi[k];
if (p[k] == p[q - 1])
k++;
my_pi[q] = k;
}
}

void my_kmp() {//匹配
int q = 0;
for (int i = 1; i <= n; ++i) {
while (q && p[q] != t[i - 1])
q = my_pi[q];
if (p[q] == t[i - 1])
q++;
if (q == m) {//匹配成功
flag = true;
printf("%dn", i - m + 1);
q = my_pi[q];
}
}
}