首先对于两个字符串s,p
判断p是s的一部分
首先定义i = 0,j = 0,那么在每次匹配失败的时候都要i++ j重置0 (这个看不懂自己写写 最简单暴力的解法)
但是会出现一种问题,假设我p字串除了最后一个字符全匹配上了,在暴力的算法中,会跳到第一个i++的位置
但是很大几率后面的几次判断是无效的(相等的不多)
比如
s abcdef
p abcd
显然当第一次失败后 abcd和bcde匹配肯定失败
然是也有例外 比如aaa aa
所以其中有一些小技巧。
kmp算法就是小技巧
在匹配过的字符串中保留相同的前缀后后缀
比如 abcefabc是某次匹配的一部分字符串
前缀abc和abc相同
那么下次匹配就直接从第二个abc开始匹配就快很多
节约了许多判断。