It is quite readable, and all the comments are quite minor.
You can probably squeeze out a little performance boost, but not much. One thing you could do is omit configuration variables like
n = len(prefix) (you don't use
n on the next line).
You might also consider
collections.deque instead of
list where relevant, which can sometimes give you a little more speed. Or if you have the option to use list comprehension, please do so.
if suffix_tree: instead of
if len(suffix_tree) == 0: It is also faster ca 30 ns vs 85 ns on my machine (Python 3.8.1).
As for the complexity of time and space, you must make a judgment as to whether time or space are more important; The only other way the search could have O (1) would be with a set.
Finally, you don't need to keep track of
found_match— you can use a
for-else with a declaration of rupture.
P.S. You must be careful with the mutant objects you are iterating over.