KMP算法

来源:互联网 发布:php什么是搭建环境 编辑:程序博客网 时间:2024/06/08 02:28

int next[]: 存储匹配失败后主串与pattern串重新比对的位置,为最大自匹配的真前缀和真后缀的长度。
如:next(5) = P[0,5)的大自匹配的真前缀和真后缀的长度。

next优化

void get_nextval(SString T , int nextval[]){ //SString 0位置存储字符串的长度    int i = 1,j = 0; nextval[1] = 0;    while(i<T[0]){        if(j==0 || T[i] == T[j]){            ++i;            ++j;            if(T[i] ! = T[[j]) nextval[i] = j;            else nextval[i] = nextval[j];        }        ele{            j = nextval[j];        }    }}   

这里写图片描述

KMP

int kmp(SString str ,SString subStr , int nextval[]){ //SString 0位置存储字符串的长度    int i = 1,j = 1;    while(i<=str[0] && j<=subStr[0]){        if(j==0 || str[i] == subStr[j]){            ++i;            ++j;        }        ele{            j = next[j];        }    }    if( j>T[0]) return i-T[0];    else return 0;}