- ⼀、模式匹配的概念
模式匹配是数据结构中字符串的⼀种基本运算,给定⼀个⼦串,要求在某个字符串中找出该字串相同的所有⼦串,这就是模式匹配。其中原
字符串成为⽬标串,给定的⼦串为模式串。 - ⼆、常⽤的模式匹配算法 1、朴素的模式匹配算法(也称简单匹配算法,Brute-Force简称BF算法) A.算法思想:
核⼼是穷举法。从⽬标串的的第⼀个字符起与模式串的第⼀个字符⽐较,若相等,则继续对字符进⾏后续的⽐较,否则⽬标串从第⼆个字符
起与模式串的第⼀个字符重新⽐较,直⾄模式串中的每个字符依次和⽬标串中的⼀个连续的字符序列相等为⽌,此时称为匹配成功,否则匹 配失败。 - 2、KMP匹配算法
Knuth-Morris-Pratt算法(简称KMP),是由D.E.Knuth、J.H.Morris和V.R.Pratt共同提出的⼀个改进算法,消除了朴素的模式匹配算法
中回溯问题,完成串的模式匹配。
A.算法思想: - 设⽬标串为s,模式串为t, i、j 分别为指⽰s和t的指针,i、j的初值均为0。 若有 si =
tj,则i和j分别增1;否则,i不变,j退回⾄j=next[j]的位置 (
也可理解为串s不动,模式串t向右移动到si与tnext[j]对齐 ); ⽐较si和tj。若相等则指针各增1;否则 j
再退回到下⼀个j=next[j]的位置(即模式串继续向右移动 ),再⽐较 si和tj。
依次类推,直到下列两种情况之⼀:
- 1)j退回到某个j=next[j]时有 si = tj,则指针各增1,继续匹配;
- 2)j退回⾄ j=-1,此时令指针各增l,即下⼀次⽐较 si+1和 t0