KMP 模板
好久没写算法类程序了 ,总觉得脑子有点秀逗了,拿个kmp练练,慢慢找回状态
1 #include<stdio.h> 2 #include<string.h> 3 4 #define MAXN 1000 5 6 int Kmp_Map(const char* str, const char* pat) 7 { 8 if (NULL== str || NULL == pat) 9 return -1; 10 11 int i, j; 12 int next[MAXN]; 13 14 for (i = 1, j = -1; *(pat + i); j = (*(pat + i) == *(pat + j + 1)) ? (j+1) : j, next[i++] = j) 15 for (;j != -1 && *(pat + i) != *(pat + j + 1); j = next[j]); 16 17 for (i = j = 0; *(str + j) && *(pat + i); i = (*(str + j) == *(pat + i)) ? (i + 1) : i, j++) 18 for (;i > 0 && *(str + j) != *(pat + i); i = next[i - 1] + 1); 19 20 if (*(pat + i)) 21 return -1; 22 else 23 return j - i; 24 } 25 26 int main() 27 { 28 char* str1 = "abcabcabdabba"; 29 char* str2 = "abcabd"; 30 printf("%d\n", Kmp_Map(str1, str2)); 31 return 0; 32 }