/* Computation of the last table */
FOR c := 'a' TO 'Z' DO
last[c] := 0;
END
i := 1
WHILE i <= m DO
last[pat[i]] = i
i := i+1
END
/* Simple Boyer Moore */
i := 1
WHILE i <= n-m+1 DO
j := m
WHILE j >= 1 AND pat[j] = text[i+j-1] D
j := j-1
END
IF j = 0 THEN RETURN TRUE
i := i+MAX(1, j-last[text[i+j-1]])
END
RETURN FALSE