KMP算法C++实现
2014-12-22 21:57
330 查看
KMP算法事模式匹配的高效算法,代码很少,但是却不是很容易理解。这几天刚好做了一些这方面的调研,写了一个C++实现版本的KMP算法,贴出来亮亮。
其实KMP算法最重要的部分是next数组的计算方法,这里有一篇讲解得非常到位的文章/article/6414353.html.
而再计算完next数组之后实现模式的匹配就简单多了,基本得策略与计算next数组得方法是一致的。好了不多说了,贴代码。
测试代码如下:
其实KMP算法最重要的部分是next数组的计算方法,这里有一篇讲解得非常到位的文章/article/6414353.html.
而再计算完next数组之后实现模式的匹配就简单多了,基本得策略与计算next数组得方法是一致的。好了不多说了,贴代码。
#ifndef HelloWorld_KMP_h #define HelloWorld_KMP_h class KMP { public: KMP() { } /* *str原始字符串 *需要查找的字符串 */ int findSubstr(char *str,char* pattern) { int *next = new int[strlen(pattern)]; getNext(pattern,next); int i=0; int len = (int)strlen(str); int j = 0; while(i<len) { if(j==-1||pattern[j]==str[i]) { i++; j++; } else { j = next[j]; } if(j==strlen(pattern)) { delete[] next; return i-(int)strlen(pattern); } } if(j==strlen(pattern)) { delete[] next; return j-(int)strlen(pattern); } delete[] next; return -1; } int strStr(char *haystack, char *needle) { if(needle==nullptr||haystack==nullptr) return -1; int *next = new int[strlen(needle)]; getNext(needle,next); int i=0,len = (int)strlen(haystack),j= haystack[0]==needle[0]?0:-1; int nLen = (int)strlen(needle); while(i<len) { if(j==-1||needle[j]==haystack[i]) { i++; j++; } else { j = next[j]; } if(j==nLen) return i-nLen; } return -1; } private: void getNext(char* pattern,int next[]) { int i=0; int j= -1; next[0]=-1; int len = (int)strlen(pattern); while(i<len) { if(j==-1||pattern[i]==pattern[j]) { i++; j++; next[i] = j; } else { j = next[j]; } } } }; #endif
测试代码如下:
#include <iostream> #include "KMP.h" using namespace std; int main(int argc, const char * argv[]) { // insert code here... KMP kmp; cout<<kmp.strStr((char*)"worljackorldworldhello", (char*)"world")<<endl; cout<<kmp.findSubstr((char*)"world", (char*)"world")<<endl; return 0; }
相关文章推荐
- KMP算法的C++实现代码
- 数据结构_串_串的模式匹配_KMP算法_C++实现
- KMP算法 C++实现
- KMP算法——C++优化实现
- KMP算法匹配原理以及C++实现
- KMP算法C++实现
- KMP算法(C++实现)
- kmp算法c++代码实现
- KMP算法C++实现
- KMP算法及c++实现
- 数据结构_串_用链表做存储结构实现KMP算法_C++实现
- 算法串匹配C++实现字符串匹配的KMP算法
- C++实现字符串匹配的KMP算法
- KMP算法C++ 实现
- kmp算法C++源码实现
- KMP算法 (C++实现)
- C++实现的KMP算法
- KMP算法 (C++实现)
- [C++]KMP算法实现
- 逐步理解KMP算法C++完整实现