这里写自定义目录标题
kmp算法之我见
kmp算法思想精妙,一般人不理解为什么这么设计,也很难讲清楚为什么O(mn)就优化到了(m+n)。我现在完全理解了,即使next数组全部是-1,它也包含了子串的重要信息,如果匹配到此,突然失败了,我就不需要在主串上只挪1格,字串完全复位后继续匹配,而是在主串当前发生不匹配的位置开始,复位子串继续前行就可以了。可以想象在一条曲线上你去匹配一个钥匙的凹槽,如果钥匙中间一小段与最前面一小段完全相同,在匹配过程中,正好过了中间这一小段后就不同了,我们怎么处理?最好的办法就是把钥匙的最前面对准这里,继续往下匹配,而不是只挪一个单位,因为只挪1个单位肯定齿轮错开,前面已经匹配过的肯定就对不上了啊!这就是kmp的精妙之处!