一、定义
字符串序列:所谓序列说明串的相邻两字符之间具有前驱和后继的关系。
子串与主串:串中连续字符组成的子序列称为该串的子串,包含子串的串称为主串。子串在主串中的位置就是子串的第一个字符在主串中的序号。
ASCII与Unicode编码:以前计算机使用标准的ASCII编码(7位二进制表示128个字符),后来发现一些特殊符号的出现,128个不够用,于是扩展ASCII码由8位二进制(表示256个字符)数表示,可是还有其他国家的字符需要编码,于是Unicode编码采用16位二进制数(6.5万多个字符),足够表示世界上所有语言字符,为了兼容ASCII码,Unicode的前256个字符与ASCII码完全相同。
串与线性表:线性表更关注的是单个元素的操作:查找插入删除;串中更多的是查找子串位置,得到指定位置子串、替换子串等操作。
在介绍KMP算法之前,先介绍一下BF算法。
二、BF算法
BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。
举例说明:
S: ababcababa
P: ababa
BF算法匹配的步骤如下
i=0 i=1 i=2 i=3 i=4
第一趟:ababcababa 第二趟:ababcababa 第三趟:ababcababa 第四趟:ababcababa 第五趟:ababcababa