def search(text, pattern):
i, k = 0, len(pattern)
table = {c: k - i for i, c in enumerate(pattern)}
while True:
print(f'search @ {i}')
if text[i:i + k] == pattern:
print(f'FOUND @ {i}')
if i + k < len(text):
i += table.get(text[i + k], k + 1)
else:
break
text = 'A parabolic (or paraboloid or paraboloidal) reflector (or dish or mirror)'
len(text)
73
search(text, 'reflector')
search @ 0 search @ 10 search @ 20 search @ 30 search @ 40 search @ 44 FOUND @ 44 search @ 54 search @ 56 search @ 66
search(text, 'not to be found')
search @ 0 search @ 6 search @ 10 search @ 11 search @ 17 search @ 33 search @ 40 search @ 44 search @ 60