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 }

posted on 2012-10-23 21:11  ltang  阅读(612)  评论(0)    收藏  举报

导航