KMP算法

来源:互联网 发布:人工智能 估值 编辑:程序博客网 时间:2024/06/09 20:55

具体知识参考:http://blog.csdn.net/v_july_v/article/details/7041827

1、计算模式的next数组

2、使用next辅助进行匹配

#include<iostream>  #include<vector>#include<string>using namespace std;vector<int> GetNext(string &p){int len = p.size();vector<int> next(len);next[0] = -1;int k = -1;  int j = 1;  //j是next数组的下标while (j<len){if (k == -1 || p[k] == p[j]){k++;       //next[j] = k;j++;      //更新next的下一位置}else{k = next[k];}}return next;}int KMP(string &s, string &p){vector<int> next = GetNext(p);int len1 = s.size();int len2 = p.size();int i = 0;int j = 0;while (i < len1 && j < len2){if (j==-1 || s[i] == p[j]){i++;j++;}else{j = next[j];}}if (j == len2) return i - j;else return -1;}int main(){string s = "abcabsdac";string p = "absd";cout << KMP(s,p);cout << endl;system("pause");return 0;}