串-KMP模式匹配算法(nextval数组)
Posted 路人姜。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了串-KMP模式匹配算法(nextval数组)相关的知识,希望对你有一定的参考价值。
#include <stdio.h> #include <stdlib.h> #include <string.h> void get_next(char T[100],int *next); int Index_KMP(char S[100],char T[100],int pos); int main() { int n; char S[100],T[100]; gets(S); gets(T); n=Index_KMP(S,T,2); printf("%d",n); return 0; } void get_nextval(char T[100],int *nextval) { int j,i; int t; nextval[0]=-1; j=-1; i=0; t=strlen(T); while(i<t) { if(j==-1||T[j]==T[i]) { i++; j++; if(T[i]!=T[j]) nextval[i]=j; else nextval[i]=nextval[j]; } else j=nextval[j]; } } int Index_KMP(char S[100],char T[100],int pos) { int i,j; int s,t; i=pos; j=0; int nextval[100]; get_nextval(T,nextval); s=strlen(S); t=strlen(T); while(i<s&&j<t) { if(j==-1||S[i]==T[j]) { j++; i++; } else j=nextval[j]; } if(j>=t) { return (i-t+1); } else return 0; }
实战总结:因为是朴素模式匹配算法的改进所以只由先理解了next函数的定义,才能容易理解nextval函数。
以上是关于串-KMP模式匹配算法(nextval数组)的主要内容,如果未能解决你的问题,请参考以下文章
KMP算法模式匹配——手工求解next和nextval数组值
字符串匹配KMP算法中Next[]数组和Nextval[]数组求法