字符串匹配
BF(Brute Force)算法
- BF是最符合人类直觉的字符串匹配算法,但是主串的下标
i经常要往回走,无法利用已匹配信息,效率不够好
1 | int bruteForce(const string& t, const string& p) { |
KMP算法
- 思想:“利用已部分匹配的信息,保持
i指针不回溯,通过修改j指针,让模式串尽量移动到有效的位置” - 定义
next数组:next[j] = d表示当t[i] != p[j]时,j下一次匹配的位置。注意到,下标从0开始,d值实际上是下标j前的最长前后缀子串的长度 - 求取
next的过程本身就是p串与自己匹配的过程- 当
p[i]==p[j],则p[++i] = ++j - 当
p[i]!=p[j],则利用前面已求得的next数组,j=next[j];直到无法找到,此时j=-1,自动进入第一个if语句,此时i往后走一步,妙
- 当