kmp 算法实现
2013-08-19 16:54
113 查看
/*================= kmp 算法实现 2013-08-19 By Mei =================*/ #include <iostream> #include <cstring> using namespace std; int *find_next(char *b) { int len = strlen(b); int *next = new int[len]; next[0] = -1; for(int i=1; i<len; ++i) { int index = next[i-1]; while(b[index+1]!=b[i]) { index = next[index+1]; if(index==-1) break; } if(b[i] == b[index+1]) { next[i] = index + 1; continue; } else next[i] = -1; } return next; } int kmp_find(char *a, char*b, int *next) { int len_a = strlen(a); int len_b = strlen(b); int array_b = 0; for(int i=0; i<len_a; ++i) { if(a[i] == b[array_b]) array_b++; else { if(array_b==0) continue; else array_b = next[array_b-1]+1; } if(array_b == len_b) return i-array_b+1; } return -1; } void print(int *a, int n) { for(int i=0;i<n;++i) cout<<a[i]<<" "; cout<<endl; } int main() { char a[] = "abcabcababc"; char b[] = "abab"; int *test; test = find_next(b); print(test, strlen(b)); int x = kmp_find(a, b, test); cout <<x <<endl; delete [] test; return 0; }
相关文章推荐
- 理解与实现KMP模式匹配算法
- Kmp字符匹配算法优化C++实现
- 数据结构串的实现以及KMP改进算法
- KMP 算法实现 及代码解释
- KMP字符串模式匹配算法实现
- 模式匹配 -- KMP 算法原理与实现
- C++ 实现搜索子串KMP 算法
- KMP模式匹配算法原理分析、next数组优化及java实现
- 字符串算法--KMP--Java实现
- KMP、BM、Sunday等字符串匹配算法及实现
- KMP 算法实现
- [算法] kmp实现
- leetcode 题解 || Implement strStr() 问题 (即 KMP 算法实现)
- KMP模式匹配算法分析与实现
- Java实现算法导论中KMP字符串匹配算法
- KMP 算法 java实现
- KMP模式匹配算法中next,nextval的分别实现
- 算法 字符串匹配算法(朴素模式及KMP模式) java实现
- KMP字符串匹配算法及C语言实现
- 转载网络上最简单易懂的KMP模式匹配算法——外加代码实现