刷LeetCode算法题的时候,碰到了这个KMP。觉得还有点意思。相对来说还是有点难度,就做个笔记梳理一下。
KMP算法则可以将时间复杂度下降到O(m+n),和O(m*n)相比明显下降。
A,B 》 j,i 不等 为0 A,C 》 j,i 不等为0 一直到 A,A 》 j,i 相等记作1.然后同时进一位。B,B 》
j,i 相等 前位置加1 。C , D不等,往前推。。A,D也不等,记作0
1 | def KMP_algorithm(string, substring): |
和主字符串对比时,如果不同,看前一位pnext值对应的字母作为分隔线。为零,就是将整个字符串都后移。