KMP算法字符串的匹配

KMP算法字符串的匹配

时间复杂度O(n+m)

 

image

i不用回溯(i是原串的指针)

j是子串指针

j>T[0]匹配成功,放回第一次出现位置i-T[0]

关键求next数组(只回溯j)

j=0是子串第一个位置和原串都不匹配的情况

image

求next数组?

固定:

next[1]=0

next[2]=1

 要计算的是:其实next数组只和子串有关

image

 

答案:01123422

next下标 1 2 3 4 5 6 7 8
字符串 a b a b a a a b
next数组 0 1 1 2 3 4 2 2

如果优化这个算法:

就可以使用nextval数组

如果T[a]=T[next[a]]

则nextval[a]=nextval[next[a]]

例如上题:

next下标 1 2 3 4 5 6 7 8
字符串 a b a b a a a b
next数组 0 1 1 2 3 4 2 2
nextval数组 0 1 0 1 0 4 2 1
posted @ 2025-08-15 14:25  Annaprincess  阅读(7)  评论(0)    收藏  举报