欢迎使用CSDN-markdown编辑器

来源:互联网 发布:linux cp复制文件夹 编辑:程序博客网 时间:2024/05/29 14:10
#include <iostream>#include <string>using namespace std;void get_next(string p, int next[]) {    next[0] = -1;    int k = -1, j = 0;    while (j < p.size() - 1)        if (k == -1 || p[j] == p[k])            next[++j] = ++k;        else            k = next[k];}int KMP(string text, string p, int* next) {    int ans = -1, i = 0, j = 0;    while (i < text.size()) {        if (j == -1 || text[i] == p[j])            i++, j++;        else            j = next[j];        if (j == p.size()) {            ans = i - p.size();            break;        }    }    return ans;}int main() {    string text = "aaaabaaaabaaaabaaaabaaaab";//raw text    string pat = "abaabcaba";//pattern    int* next = new int[pat.size()];    get_next(pat, next);    cout << KMP(text, pat, next);    cin.get();    return 0;}
0 0
原创粉丝点击