1. 引言
字符串匹配是极为常见的一种模式匹配。简单地说,就是判断主串\(T\)中是否出现该模式串\(P\),即\(P\)为\(T\)的子串。特别地,定义主串为\(T[0 \dots n-1]\),模式串为\(P[0 \dots p-1]\),则主串与模式串的长度各为\(n\)与\(p\)。
暴力匹配
暴力匹配方法的思想非常朴素:
- 依次从主串的首字符开始,与模式串逐一进行匹配;
- 遇到失配时,则移到主串的第二个字符,将其与模式串首字符比较,逐一进行匹配;
- 重复上述步骤,直至能匹配上,或剩下主串的长度不足以进行匹配。
下图给出了暴力匹配的例子,主串T="ababcabcacbab",模式串P="abcac",第一次匹配:

第二次匹配:
第三次匹配:
本文介绍了KMP算法的起源和思想,详细解析了部分匹配函数的概念及其计算方式,展示了KMP算法如何避免暴力匹配中的重复比较,提高了字符串匹配的效率。通过C语言实现了KMP算法和部分匹配函数,整体时间复杂度为(O(n+p))。
订阅专栏 解锁全文
7601

被折叠的 条评论
为什么被折叠?



