KMP字符串匹配算法
参考:
算法思想:
- KMP匹配算法
暴力匹配的算法是主串 与模式串挨个字符对比,不同时,主串起始点加一,模式串从0开始挨个字符对比。--m*n
而KMP的意思是,当某个字符不匹配时,前面都是匹配的,只要知道了模式串的最长前缀串,那么前面不用再次比较了,只需要把匹配串的指针移动到最长前缀串后一位就可以继续比较了。--m+n
- 查找最长公共前后缀的算法
起始时j指向0,i指向j+1。 若array i 与array j相同时,next i = j+1;i++,j++。
若不同时,则将j= next[j-1] 一直到j=0 为止。继续比较----这里比较难得理解

这里我的理解是为啥 arr j != arr i 时,需要将j移动到profix[j-1]
因为 当arr j != arr i 时 ,此时 他们的前面肯定是匹配的,只到这里才不匹配,而j-1 时的最长前缀正好就对应着和 i-1是匹配的,所以只需要移动j=profix[j-1]

浙公网安备 33010602011771号