JsprX
  • Archive

KMP 字符串匹配

  • Algorithm
  • Jun 10, 2020
  • 0 views

1

2

3

4

5

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
27
28
29
30
31
32
33
34
35
36
37
void preKmp(char *x, int m, int kmpNext[]) {
   int i, j;

   i = 0;
   j = kmpNext[0] = -1;
   while (i < m) {
      while (j > -1 && x[i] != x[j])
         j = kmpNext[j];
      i++;
      j++;
      if (x[i] == x[j])
         kmpNext[i] = kmpNext[j];
      else
         kmpNext[i] = j;
   }
}


void KMP(char *x, int m, char *y, int n) {
   int i, j, kmpNext[XSIZE];

   /* Preprocessing */
   preKmp(x, m, kmpNext);

   /* Searching */
   i = j = 0;
   while (j < n) {
      while (i > -1 && x[i] != y[j])
         i = kmpNext[i];
      i++;
      j++;
      if (i >= m) {
         OUTPUT(j - i);
         i = kmpNext[i];
      }
   }
}
  1. The Knuth-Morris-Pratt Algorithm in my own words - Jake Boxer ↩

  2. String-searching algorithm ↩

  3. Knuth-Morris-Pratt algorithm -  ↩

  4. 算法之字符串模式匹配 - 知乎专栏 ↩

  5. 字符串匹配 - OI wiki ↩

Subscribe

This work is licensed under a Attribution-NoDerivatives 4.0 International license. Attribution-NoDerivatives 4.0 International

PREVIOUSBye Bye NPE
NEXT编写卓越的代码——防御性编程
Search