天天看点

kmp算法理解(next数组+匹配)

1.next数组的理解()

kmp算法理解(next数组+匹配)
kmp算法理解(next数组+匹配)
kmp算法理解(next数组+匹配)

(自己结合李春葆做的ppt有需要我再发)

2.next数组在匹配过程中的应用

kmp算法理解(next数组+匹配)

Next:-10012

子串: ababc

主串:abababc

不匹配的时候 i=4;j=next[4]=2

‘C’前面两个字符与t开头两个字符相同,

故主串s[4]=‘a’前有两个字符与t开头两个字符配对,所以当失配的时候比较s[4],t[2];

bab不是子串的前缀,ab是,此时j=next[j]=2;

即子串滑到t[2]=a;

(相当于在bf算法中回溯到第三个字符后匹配完)

Next数组的作用就是避免主串的回溯,利用子串中子串与前缀的匹配程度,只进行子串的回溯.lk

比如ABCDABCDEFG里匹配ABCDE到了第2个A的时候第一次失配。这个时候由于前面的BCD、CD、D这些子串都不是ABCDE的前缀部分,所以可以跳过。没有必要从第二个字母再开始。k值就是用来确定字符串作为前缀和模式的匹配程度的。

代码

kmp算法理解(next数组+匹配)