首先,允许我标题党了,看毛片算法和毛片没啥关系,如果你不小心进来了,那么我只能说呵呵了,呵呵^ ^
KMP算法其实是一个O(n)的字符串匹配算法
A = "ababacbacab"
B = "baca"
假设位置从1开始
这样可以说B是A的一个子串,首先我们想到的办法是枚举A的位置,比如
1.首先枚举位置A[1],即字符'a',然后从A[1]开始比较"abab"是否等于"baca",显然不等
2.接着枚举位置A[2],即字符'b',然后从A[2]开始比较"baba"是否等于"baca",显然,又不匹配
......
经过不断得尝试,我们终于枚举到一个位置A[7]开始的子串"baca"与B相等,my god,真不容易
我们来计算一下时间复杂度,我们枚举A的位置,最多有O(A.length())个位置,并且每个位置最多要匹配O(B.length()),所以,算法复杂度当然是O(A.length()*B.length())的啦
下面我们来见识一下神奇的看毛片算法
看毛片算法的思想是用两个指针i和j来指示A和B中的一个位置
1) 用i来表示当前匹配到A中的哪个位置啦
2) 用j来表示当前匹配到B中的哪个位置啦
3) 并且要满足B[1...j]要和A[i+j-1...i]相等
哦?很难理解啊,下面的图(图1)应该使你能够一拍脑袋,“哦,我太聪明了,这么简单!”