KMP

Posted wronin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KMP相关的知识,希望对你有一定的参考价值。

#include <iostream>
#include <cstring>
using namespace std;
const int maxn = 1000000+7;
char s[maxn], p[maxn];
int net[maxn];
int lens, lenp;
void getnext() 
    net[0] = -1;
    int i = 0,j = -1;
    while (i < lenp - 1) 
        if (j == -1 || p[i] == p[j]) 
net[++i] = ++j;
        else j = net[j];
    

int kmp() 
    lens = strlen(s);
    lenp = strlen(p);
    int i = 0, j = 0;
    getnext();
    while (i < lens && j < lenp) 
        if (s[i] == p[j] || j == -1) i++, j++;
        else j = net[j];
    
    if (j == lenp) return i - j;
    else return -1;

int main() 
    cin >> s;
    cin >> p;
    int ans = kmp();
    cout << ans << endl;
    return 0;

 

以上是关于KMP的主要内容,如果未能解决你的问题,请参考以下文章

kmp算法详解

hdu-4763(kmp+拓展kmp)

KMP&拓展KMP

什么是KMP算法?KMP算法推导

KMP算法

模板KMP字符串匹配KMP