Если количество уникальных
word
не слишком велико, то можно сделать "index" по ним. Тогда последующий поиск такой же подстроки будет происходить за O(1), а не за O(n) как это происходит с оператором in. Минус - оверхед по памяти на индекс.
def in_checker(word, s):
if not hasattr(in_checker, '_index'):
in_checker._index = {}
if word not in in_checker._index:
in_checker._index[word] = word in s
return in_checker._index[word]
in_checker('abc', 'tttrrrabcwww'); # O(n)
in_checker('abc', 'tttrrrabcwww'); # O(1)