KMP的创造next数组代码及常用的字符串比较代码

哎,老是忘了next数组应该怎么编号,记下来下次直接方便提醒自己

一句话概括next数组作用: kmp思想:对字符串进行预处理,记录与当前位置i前缀相同的“最近”位置,用next[i]记录

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<cmath>
using namespace std;
char a[1005];
int ne[1005];
void findnext()
{
    int i = 0, j = -1;
    ne[0] = -1;
    int len = strlen(a);
    while(i < len)
    {
        if(j == -1 || a[i] == a[j])
            ne[++i] = ++j;
        else j = ne[j];
    }
}
int main()
{
    cin>>a;
    findnext();
    for(int i = 0; i <= strlen(a); i ++)
        cout<<ne[i]<<' '<<endl;
    return 0;
}
int kmpcompare()
{
    findnext();
    int lena= strlen(a), lenb = strlen(b);
    int i = 0, j = 0;//i标记母串的位置,j标记子串的位置
    while(i < lena && j < lenb)
    {
        if(j == -1 || a[i] == b[j]){j ++; i ++;}//相等就共同进一位
        else j = ne[j];
    }
    if(j == lenb) return i - j + 1;//结束条件
    else return -1;
}

    原文作者:KMP算法
    原文地址: https://blog.csdn.net/qq_41444888/article/details/79100789
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞