KMP算法的实现

来源:互联网 发布:淘宝售后服务内容 编辑:程序博客网 时间:2024/05/16 02:27
KMP算法是经典的字符串匹配算法,巧妙的利用了匹配字符串本身的信息,经过摊还分析后,可以得到O(N)的时间复杂度
#include <string>#include <iostream>#include <vector>using namespace std;vector<int> Compute_M_Function(string s);void KMP_MATCHER(string s, string p){int n = s.size();int m = p.size();vector<int> svec = Compute_M_Function(p);int i = 0;int j = 0;while (i < n&&j < m){if (j == -1 || s[i] == p[j]){i++;j++;}elsej = svec[j];}if (j >= m)cout << "match it!!" << i - m << endl;elsecout << "no match !!" << endl;}vector<int> Compute_M_Function(string s)   //计算字符串本身的信息。{int len = s.size();if (len == 0)return vector<int>();vector<int> svec(len,-1);int k = -1;                           for (int i = 1; i < len; i++){while (k > -1 && s[k+1] != s[i])k = svec[k];if (s[k+1] == s[i])k = k + 1;svec[i] = k;}return svec;}

0 0