数据结构和算法

字符串匹配

Posted by JT on October 19, 2018

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];
	    }
	}
}