KMP的历史自行找度娘
关于原理可以看下面的链接
在此,列出我自己对KMP的理解
非-1版本
传统的字符串匹配方式为一个字符一个字符匹配,这样做效率很低。
KMP算法的核心是i相对于父串只增不减,即不会回退。所以不会做重复的事
KMP算法的难度在于求解偏移量,而偏移量和要查找的子串及当前匹配的长度息息相关。
题:子串key = "abaaaba"
,求解next数组
next数组的index表示什么?表示的是当前子串和父串已经匹配的字符个数,
比如: aba...
和abacd...
,此时最大匹配长度为3,故此时偏移量为1.
因为aba前缀为【a, ab】后缀【ba, a】,前缀和后缀相同的最大长度为1,所以next数组3的位置的值为1