Encuentra un patrón en un texto sin retroceder nunca el puntero del texto. Velocidad a partir de una tabla de fallo precalculada.
lps[i] = prefijo propio más largo de pattern[:i+1] que también es sufijolps[j−1]Azul = comparando · verde = coincidió · rojo = mismatch.
Después de que abab falla, el patrón brinca hacia adelante — sin rebobinar.
aaaa…a vs aaaa…b: ingenuo 398K comparaciones, KMP 16K → 25× menos.
El ingenuo no está mal — está frágil (cuadrático latente con entrada repetitiva). KMP paga un setup O(m) por una garantía lineal, sea cual sea la entrada. Sigue: Rabin-Karp — comparar números (rolling hash), no cadenas.