Python implementation of Boyer_Moore algorithm for patter matching
This version includes both the 'bad character' and the 'good suffix'
heuristics. The program preprocesses the pattern and creates different arrays
for each of the two heuristics. At every step, it slides the pattern by the
maximum of the slides suggested by the two heuristics at every step.
Worst case performance is Theta(m) (preprocessing) + O(mn) (matching).
Best case performance is Theta(m) preprocessing + Omega(n/m) matching.
"""