KMP算法(-)

来源:互联网 发布:js在线解密 编辑:程序博客网 时间:2024/05/21 14:51
今天简单的给大家介绍一下KMP算法,
#include "stdafx.h"#include "string.h"int Index_Kmp(char S[],char T[],int next[],int pos,int n,int m){int i =pos-1;int j=-1;while( (i <n)&&(j <m)){if(j==-1||S[i]==T[j]){++i;++j;}else{j = next[j]-1;//J被回溯}for(int k=0;k<=i;k++){printf("%c ",S[k]);}printf("\n");for(int k=0;k<=i;k++){if(k<i-j)printf("  ");elseprintf("%c ",T[k+j-i]);}printf("\n");if(j>=m)return i- m;}return 0;}
//求next数组void makeNext(const char T[],int next[]){int i =0;int j =-1;next[0] = 0;while(i<strlen(T)){if(j==-1||T[i]==T[j]){++i;++j;next[i] = j+1;}else{j = next[j]-1;//J被回溯}}}int _tmain(int argc, _TCHAR* argv[]){int pos =0;int next[32]={0};char S[]={'a','b','a','b','a','a','c','a','b','a','a','b','a','b','a','a','b','a','b','c','a','\0'};//原串char T[]={'a','b','a','b','a','a','b','a','\0'};//目标串int n = strlen(S);int m = strlen(T);makeNext(T,next);pos =Index_Kmp(S,T,next,0,n,m);//返回原串在目标串中的起始位置printf("%d\n",pos);getchar();return 0;}
</pre><p></p><p>程序运行步骤如下:</p><p><pre name="code" class="cpp">aaa ba ba b aa b aa b a ba b a ba b a b aa b a b aa b a b a aa b a b a aa b a b a a ca b a b a a ba b a b a a c          a ba b a b a a c            aa b a b a a c
a b a b a a c a              aa b a b a a c a b              a ba b a b a a c a b a              a b aa b a b a a c a b a a              a b a ba b a b a a c a b a a                  a ba b a b a a c a b a a                    aa b a b a a c a b a a b                    a ba b a b a a c a b a a b a                    a b aa b a b a a c a b a a b a b                    a b a ba b a b a a c a b a a b a b a                    a b a b aa b a b a a c a b a a b a b a a                    a b a b a aa b a b a a c a b a a b a b a a b                    a b a b a a ba b a b a a c a b a a b a b a a b a                    a b a b a a b aa b a b a a c a b a a b a b a a b a b                    a b a b a a b a 



0 0
原创粉丝点击