字符串匹配
问题描述:在字符串T中找模式串P的位置
目标串T,长度为N
模式串P,长度为M
BF算法:
时间复杂度:O(N*M)
KMP算法:
-
思想:BF算法在字符串失配后,目标串的指针都要回退到开始位置+1。KMP消除了目标指针的回退,提高模式匹配效率。
-
既然消除了目标串的指针回退,那么变化的是模式串P的指针。当发生失配时,模式串P中哪个字符和目标串继续比较?–》next特征向量。
-
next的计算
int k=-1;
(1)j==0,next[0] = -1;
(2)j > 0,
(2.1)k == -1,j++; k++; next[j] = k(0); //next[1] = 0;
(2.2)k != -1
(2.2.1)P[j] == P[k], j++; k++; next[j] = k;
(2.2.2)P[j] != P[k],k = next[k];
4. 时间复杂度:O(N+M)