Longest Common Extension — Solution & Editorial
Polynomial hashing supports O(1) substring equality; binary search the match length per query. (Suffix array + sparse-table RMQ over LCP gives O(1) per query.)
Complexity: O((|S| + Q) log |S|)
Watch out: Use a 61-bit modulus (or double hashing) — 32-bit hashing is trivially collidable at these sizes.