最近温习了一下KMP算法。现在谈谈我对KMP算法的理解。
KMP算法目的:尽量快的解决单字符串匹配的问题。
一、问题:
主字符串: ababcababababcab
模式串: abababab
判断在主串中是否存在模式串,如果存在,在哪个位置。
二、解决
解决办法很多,单谈KMP算法的next获取方法。
next数组的目标:在匹配失败的时候,将模式串的下标位置尽量的少的前移,使匹配速度最快。
进一步说就是:在模式串的每一个位置进行切割(不包括当前位置),前面一段字符串中,找出一个后缀(即不包括第一个字符),使得完全匹配自身的前缀。
可能有点绕口,看图!
1. 为了更直观起见,我将模式串进行放大并影分身!你看到的是两个模式串,但其实是一个(后面不再提醒)。