¿La forma más rápida de encontrar la distancia mínima de Hamming a cualquier subcadena?

Dada una larga cuerdaL y una cuerda más cortaS (la restricción es queL.length debe ser> =S.length), quiero encontrar la distancia mínima entre HammingS y cualquier subcadena deL con longitud igual aS.longitud. Llamemos a la función para esto.minHamming(). Por ejemplo,

minHamming(ABCDEFGHIJ, CDEFGG) == 1.

minHamming(ABCDEFGHIJ, BCDGHI) == 3.

Hacer esto de la manera obvia (enumerar cada subcadena de L) requiere O (S.longitud *L.length) tiempo. ¿Hay alguna forma inteligente de hacer esto en tiempo sublineal? Busco lo mismoL con varios diferentesS cuerdas, por lo que hacer un preprocesamiento complicado paraL una vez es aceptable.

Edit: El Boyer-Moore modificado sería una buena idea, excepto que mi alfabeto es de solo 4 letras (ADN).

Respuestas a la pregunta(3)

Su respuesta a la pregunta