KMP算法(字符串匹配算法)
1 void GetNext(char t[] , int next[]){ 2 int i = 0; 3 int k = -1; 4 next[0] = -1; 5 while(t[i] != '\0'){ 6 if(k == -1 || t[i] == t[k]){ 7 next[++i] = ++k; 8 } 9 else k =next[k]; 10 } 11 } 12 int KMP(char s[] , char t[]){ 13 int i = 0; 14 int j = 0; 15 int next[80]; 16 GetNext(t , next); 17 while(s[i] != '\0' && t[j] !='\0'){ 18 if(s[i] == t[j] || j == -1){ 19 ++i; 20 ++j; 21 } 22 else{ 23 j = next[j]; 24 25 } 26 } 27 if(t[j] =='\0') reuturn i - strlen(t); 28 else reuturn -1; 29 }
蛮力法求Next数组: