@@ -50,7 +50,7 @@ KMP 算法就是使用了这样的思路,对模式串 $p$ 进行了预处理
50
50
- $next[ 0] = 0$,因为 ` "A" ` 中无有相同前缀后缀,最大长度为 $0$。
51
51
- $next[ 1] = 0$,因为 ` "AB" ` 中无相同前缀后缀,最大长度为 $0$。
52
52
- $next[ 2] = 0$,因为 ` "ABC" ` 中无相同前缀后缀,最大长度为 $0$。
53
- - $next[ 3] = 1$,因为 ` "ABCA" ` 中有相同的前缀后缀 ` "a " ` ,最大长度为 $1$。
53
+ - $next[ 3] = 1$,因为 ` "ABCA" ` 中有相同的前缀后缀 ` "A " ` ,最大长度为 $1$。
54
54
- $next[ 4] = 2$,因为 ` "ABCAB" ` 中有相同的前缀后缀 ` "AB" ` ,最大长度为 $2$。
55
55
- $next[ 5] = 3$,因为 ` "ABCABC" ` 中有相同的前缀后缀 ` "ABC" ` ,最大长度为 $3$。
56
56
- $next[ 6] = 0$,因为 ` "ABCABCD" ` 中无相同前缀后缀,最大长度为 $0$。
@@ -68,7 +68,7 @@ KMP 算法就是使用了这样的思路,对模式串 $p$ 进行了预处理
68
68
如果文本串 $T[ i: i + m] $ 与模式串 $p$ 的失配是在第 $j$ 个下标位置发生的,那么:
69
69
70
70
- 文本串 $T$ 从下标位置 $i$ 开始连续的 $j$ 个字符,一定与模式串 $p$ 的前 $j$ 个字符一模一样,即:$T[ i: i + j] == p[ 0: j] $。
71
- - 而如果模式串 $p$ 的前 $j $ 个字符中,前 $k$ 位前缀和后 $k$ 位后缀相同,即 $p[ 0: k] == p[ j - k: j] $,并且要保证 $k$ 要尽可能长。
71
+ - 而如果模式串 $p$ 的前 $j$ 个字符中,前 $k$ 位前缀和后 $k$ 位后缀相同,即 $p[ 0: k] == p[ j - k: j] $,并且要保证 $k$ 要尽可能长。
72
72
73
73
可以推出:文本串子串的后 $k$ 位后缀和模式串子串的前 $k$ 位是相同的,即 $T[ i + j - k: i + j] == p[ 0: k] $(这部分是已经比较过的),不需要再比较了,可以直接跳过。
74
74
@@ -151,4 +151,4 @@ print(kmp("ababbbbaaabbbaaa", "bbbb"))
151
151
- 【博文】[ 从头到尾彻底理解 KMP - 结构之法 算法之道 - CSDN博客] ( https://blog.csdn.net/v_JULY_v/article/details/7041827?spm=1001.2014.3001.5502 )
152
152
- 【博文】[ 字符串匹配的 KMP 算法 - 阮一峰的网络日志] ( http://www.ruanyifeng.com/blog/2013/05/Knuth–Morris–Pratt_algorithm.html )
153
153
- 【题解】[ 多图预警 - 详解 KMP 算法 - 实现 strStr() - 力扣] ( https://leetcode.cn/problems/implement-strstr/solution/duo-tu-yu-jing-xiang-jie-kmp-suan-fa-by-w3c9c/ )
154
- - 【题解】[ 「代码随想录」KMP算法详解 - 实现 strStr() - 力扣] ( https://leetcode.cn/problems/implement-strstr/solution/dai-ma-sui-xiang-lu-kmpsuan-fa-xiang-jie-mfbs/ )
154
+ - 【题解】[ 「代码随想录」KMP算法详解 - 实现 strStr() - 力扣] ( https://leetcode.cn/problems/implement-strstr/solution/dai-ma-sui-xiang-lu-kmpsuan-fa-xiang-jie-mfbs/ )
0 commit comments