BF(Brute Force)算法
朴素的模式匹配算法,从最开始开始比较,不相等就后移,然后重新比较,时间复杂度为O(N*M)。
KMP算法
KMP算法的核心就是避免不必要的回溯,问题的关键在模式串,而不是目标串。
i: 后缀
j: 前缀
NEXT数组:当模式匹配串T失配时,NEXT数组对应的元素指导应该用T串的哪个元素进行下一轮的匹配。NEXT数组要根据模式匹配串T失配之前的前缀和后缀的相等个数求出。
void getNext(String T, int *next) {
i = 0;
j = 1;
next[1] = 0;
while(i < T[0]) {
if (j == 0 || T[i] == T[j]) {
i++;
j++;
if (T[i] != T[j]) {
next[i] = j;
}
else {
next[i] = next[j];
}
}
else {
j = next[j];
}
}
}