字符串匹配之KMP算法
2013-08-30 23:58
267 查看
线性时间的字符串匹配算法。
比较长的一篇讲述KMP的博客:http://www.cnblogs.com/rollenholt/articles/2070664.html
比较长的一篇讲述KMP的博客:http://www.cnblogs.com/rollenholt/articles/2070664.html
/* kmp.c * string matcher */ #include <stdio.h> #include <stdlib.h> int szl_strlen (const char * str){ return ('\0' == * str) ? 0 : (1 + szl_strlen (1 + str)); } int * kmp_prefix_function (int * dest, const char * pattern){ int m = szl_strlen (pattern); int k = 0; int q; * dest = 0; for (q=1; q<m; q++){ while (0 < k && pattern[k+1] != pattern[q]) k = dest[k-1]; if (pattern[k+1] == pattern[q]) k = k + 1; dest[q] = k; } } int kmp (const char * text, const char * pattern){ int n = szl_strlen (text); int m = szl_strlen (pattern); int * pi = (int *) malloc (sizeof (int) * m); int i,q; kmp_prefix_function (pi, pattern); q = 0; for (i=0; i<n; i++){ while (0<q && text[i] != pattern[q]) q = pi[q-1]; if (text[i] == pattern[q]) q = q + 1; if (q == m){ printf ("%d position occurs.\n", i+2-m); q = pi[q-1]; } } free (pi); } int main (int argc, char * argv[] ){ char * t = "abababababcab"; char * s = "abab"; kmp (t, s); return 0; }
1 position occurs. 3 position occurs. 5 position occurs. 7 position occurs.
相关文章推荐
- KMP算法:字符串匹配
- 字符串匹配的KMP算法
- 字符串匹配的KMP算法原理——16张图片看完就懂了
- 字符串匹配KMP算法
- 字符串匹配的KMP算法(部分匹配表:前缀---后缀)
- 【算法】字符串匹配的KMP算法
- 字符串匹配的KMP算法
- 字符串匹配 - KMP算法
- 字符串匹配的KMP算法(2)
- 字符串匹配KMP算法
- 算法 字符串匹配之朴素算法和KMP算法及JAVA代码实现
- 字符串匹配算法(二)-KMP算法
- KMP算法及字符串匹配学习
- 字符串匹配的KMP算法
- KMP算法 --字符串匹配
- 字符串匹配的KMP算法
- kmp算法(用来处理字符串匹配)
- 字符串匹配的KMP算法(转)
- 字符串匹配的KMP算法
- 透彻理解KMP算法 - 字符串匹配/子串查找