KMP-Matcher(T, P)

n = length(T)

m = length(P)

= Compute-Prefix-Function(P)
; O(m) amortized

q = 0

for i = 1 to n
; O(n) amortized

while q > 0 and P[q+1] T[i] ; where do we move to in P?

q = [q]

if P[q+1] = T[i]
; matches so far

then q = q + 1

if q = m

then print ``Pattern occurs with shift'' (i-m)

q = [q]

This algorithm takes O(m+n) time