kmp模式笔记

KMP模式(字符串)匹配算法讲解

设有主串S={s0,s1,s2……s(M-1)},S.length=M,0≤i≤M-1

模式串T={t0,t1,t2……t(N-1)},T.length=N,0≤j≤N-1

(M>>N>0)

对模式串进行预处理,生成“部分匹配”信息数组next[N]

对于任意一个T[j](tj),其next[tj]=Max{k|第k个元素前的字符串{t0,t1……t(k-1)}==第j个元素前的k个字符串{t(j-k),t(j-k+1)……t(j-1)}},且next[t0]=-1

将模式串T和主串S进行比较

i从0开始,j从0开始,若S[i]==T[j],则i++,j++,若S[i]!=T[j],则将j=next[tj],再比较S[i]与T[j],循环上述操作,直至匹配成功(j>N-1)或匹配失败(i>M-1)

例:S={aaaaab}

      M=6

T={aaab}

      N=4

Next表

下标

0

1

2

3

a

a

a

b

Next值

-1

0

1

2

修正next表,若next表中存在k=next[j],T[k]==T[j]时,则使next[j]=next[k],k<j,记为nextval表

Nextval表

下标

0

1

2

3

a

a

a

b

Nextval值

-1

-1

-1

2

则匹配流程为(next表):

(1)         i=0,j=0,S[i]==T[j],i++,j++

(2)         i=3,j=3时S[3]!=T[3]

(3)         则j=next[t3]=next[T[3]]=2

(4)         i=3,j=2,S[3]==T[2],i++,j++

(5)         i=4,j=3时S[4]!=T[3]

(6)         则j=next[t3]=next[T[3]]=2

(7)         i=4,j=2, S[4]==T[2],i++,j++

(8)         i=5,j=3, S[5]==T[3],i++,j++

(9)         i=6,j=4>(N-1)=3,则停止,输出i-N=2,{s2,s3……s(2+N)}为匹配的模式串


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值