#數據結構#串模式匹配_KMP算法

1.next[]數組概念:

/*		 串的模式匹配		*/
/*		KMP匹配算法		*/
/*	
next[j]是指t[j]字符前有多少個字符與t開頭的字符相同 
比如t="a b a b c" 考慮t[4]='c'
存在 t0t1=t2t3='ab' --->可知next[4]=2 
*/
void GetNext(SqString t,int next[]){ //尋找加速匹配 
	int i,k;
	j=0;k=-1;next[0]=-1;		
	while(j<t.length-1){
		if(k==-1||t.data[j]==t.data[k]){
			j++;k++;
			next[j]=k;
		}
		else{
			k=next[k];
		} 
	}
} 
//kmp
int KMP(SqString s,SqString t){
	int next[MaxSize],i=0,j=0;
	GetNext(t,next);
	while(j<s.length&&j<t.length){
		if(j==-1||s.data[i]==t.data[j]){
			i++;
			j++;// 沒有有用信息或兩個字符相等,繼續比較後面的字符 
		}
		else{
			j=next[j]; //i不變,j後退 
		}
	}
	if(j>=t.length){
		return(i-t.length); //返回匹配模式串的首字符下標 
	} 
	else{
		return(-1); //返回不匹配 
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章