串的模式匹配算法
算法目的:确定主串中所含子串第一次出现的位置
算法应用:搜索引擎、拼写检查、语言翻译等
算法种类:BF算法(Brute-Force,特点:古典、景点、朴素、穷举)
KMP算法(特点:速度快)
BF算法介绍:
在主串中查找与模式T(副串)相匹配的子串,如果匹配成功,返回子串在主串出现的第一个字符的位置。
不一定非要从第一个元素开始。可以指定在主串中的起始位置。
BF算法设计思想:
Index(S,T,pos)
- 将主串第pos个字符和模式串的第一个字符比较
- 若相等,继续逐个比较后续字符串
- 若不相等,从主串的下一个字符起,重新与模式串的第一个字符比较
- 直到主串的一个连续字符串序列与模式串相等。返回S与T匹配子序列第一个字符的序号,即匹配成功
- 否则,匹配失败,返回值0
过程演示:
主串:aaaaab
模式串:aaab
匹配过程描述:数组存储字符串,从第一个字符开始,下标为0。使用S[i]获取主串字符,使用T[j]获取模式串字符。
如果S[i]==j[i],++i,++j;
如果S[i]!=j[i],i返回为起始值加一,j重置为0。
- 第一趟匹配:
i=0
a a a a a b
a a a b
j=0
//当i=3 j=3时 S[i]=a J[i]=b不匹配,i=(i-j+1)=(3-3+1)=1
j=0
- 第二趟匹配:
i=1
a a a a a b
a a