KMP算法是一种比较高效的串匹配算法,高效体现在:源串下标不回溯,子串合理的移动。
KMP算法属于思路比较复杂的算法,我自己学习这个算法可以说是第三次了,前两次是似懂非懂的,但是最近在刷牛客题的时候,发现这个算法还是挺高效的,按照常规思路我的程序在时间复杂度根本通不过,所以下狠心再次去学习这个算法,终于整理出来了。现在觉得要想学懂这个算法必须要耐下心来一遍遍的变量跟踪。
本文主要整理出我自己学习KMP算法的手工过程,只要认真跟着我的思路去走,多次变量跟踪,理解这个算法没有问题。
例子一:
从例子一看出源字符串每次从失配点与子字符串下表为0的地方开始比较,没有问题,因为子字符串前面的字符都不一样(很抽象)。请看例子二。
例子二:
例子三:
完整例子4: