数据结构实验之串一:KMP简单应用

来源:互联网 发布:电力大数据应用案例 编辑:程序博客网 时间:2024/05/29 16:17
#include<bits/stdc++.h>using namespace std;#define maxN 1000100void getnext(char b[], int next[])///这个应该是没有问题的{    int j, n, i = 0;    n = strlen(b);    next[0] = -1;    j = -1;    while(i < n)///这一块好说,就是如果相等就往后移并且++,不相等就回溯    {        if(j == -1 || b[i] == b[j])            next[++i] = ++j;        else            j = next[j];    }}void kmp(char a[], char b[], int next[])///这一块就是:j首先要放到0(用来比较第一位){    getnext(b, next);    int i = 0, j = 0, m = strlen(a), n = strlen(b);    while(i < m && j < n)    {        if(j == -1 || a[i] == b[j])///如果相等就都往后移        {            ++i, ++j;        }        else///否则回溯            j = next[j];    }    if(j >= n)///如果b串跑到底了,说明存在这个子串        printf("%d\n", i - n + 1);///输出    else        printf("-1\n");}int main(){    char a[maxN], b[maxN];    int next[maxN];    while(~scanf("%s %s", a, b))    {        kmp(a, b, next);    }    return 0;}

阅读全文
0 0
原创粉丝点击