¿Encontrar un patrón en una cadena con uno o cero falta de coincidencia? Por ejemplo: S = abbbaaabbbabab P = abab Las coincidencias son abbb (índice 0), aaab (índice 4), abbb (índice 6), abab (índice 10). Supongo que se puede hacer mediante alguna modificación del algoritmo KMP.

Si. Se puede hacer usando el algoritmo KMP en tiempo lineal. En aras de la simplicidad, explicaré el uso del algoritmo Z, que también es un algoritmo de coincidencia de cadenas de tiempo lineal.

Dada una cadena S, el algoritmo Z calculará una matriz Z donde Z [i] denota el prefijo común más largo de las cadenas S [i .. | S | – 1] y S [0 .. | S | – 1] (esa es la cadena S misma). Tenga en cuenta que también puede calcular la misma matriz Z utilizando el algoritmo KMP.

Supongamos que tenemos una matriz Z1 donde Z1 [i] denota el prefijo común más largo de las cadenas S [i .. | S | – 1] y P. Puede calcular la matriz Z1 ejecutando el algoritmo Z en P # S.

Llamemos al reverso de S como S ‘ y al reverso de P como P’. Ejecute el algoritmo Z en P ‘# S’ y calcule la matriz Z2 como se indicó anteriormente .

Ahora para cada i en el rango de 0 a | S | – 1, tenemos que decir si la falta de coincidencia entre las cadenas S [i..i + | P | – 1] y P es como máximo 1. Podemos responder esto en tiempo constante usando las matrices Z1 y Z2.

Si Z1 [i] = | P | o Z1 [i] = | P | – 1, entonces hay una coincidencia.
De lo contrario, sea Z1 [i] = x. Ahora sabemos que la primera falta de coincidencia se produjo en la posición i + x. Para que la falta de coincidencia sea como máximo 1, la parte de la cadena después de i + x debe coincidir exactamente con el resto de la cadena en P. Formalmente, la cadena S [i + x + 1… i + | P | – 1] debe ser igual a P [x + 1… | P | – 1]. Puede encontrar si son iguales utilizando la matriz Z2. Puede notar que la condición es Z2 [| S | – i – | P |]> = | P | – x – 1.

Todos los índices i en los que hay coincidencia es la respuesta requerida.

More Interesting

¿Qué bootcamp de codificación requiere codificación o entrevistas técnicas para sus aplicaciones?

¿Cómo debo prepararme para las preguntas de concurrencia que se hacen en las entrevistas de Dropbox?

Cómo prepararme para codificar entrevistas en tres meses

¿Puedo escribir código en mi computadora portátil en lugar de una pizarra durante una entrevista de trabajo? ¿Qué tal proyectado en una pantalla para que todos en la sala puedan verlo? ¿Por qué perder el tiempo en una habilidad irrelevante como codificar en pizarras blancas?

¿Cuáles son las preguntas de la entrevista más frecuentes (técnicas y de recursos humanos, ambas) para estudiantes de ingeniería informática?

¿A las empresas realmente no les importa la respuesta en las entrevistas técnicas? Escuché que a las compañías solo les importa el proceso. Sin embargo, cada vez que busco una respuesta, es un rechazo garantizado, especialmente para las entrevistas en persona. ¿Fingir confianza es importante en las entrevistas?

¿Hay una laguna en el procedimiento de entrevista de TI?

¿Qué tipo de preguntas se hacen en una entrevista en Google para el rol de ingeniero de software, para un candidato con un año de experiencia laboral?

¿Cuáles son algunas de las preguntas que se hacen comúnmente en una entrevista técnica?

¿Cuánto tiempo pasaste preparándote para las entrevistas de Google? ¿Todos los que se metieron en Facebook, Google, etc. realmente son tan buenos para resolver o entender cada algoritmo o problema clásico?

¿Cómo puedo equilibrar los paréntesis en una cadena usando un número mínimo de ediciones?

¿Tener buenas habilidades de comunicación realmente importa para un trabajo de ingeniería de software?

¿Cuáles son las preguntas técnicas que se hacen durante la entrevista en el sitio como desarrollador front-end?

¿Cuáles son algunas preguntas difíciles de la entrevista en el núcleo de Java?

Instituto Nacional de Tecnología Motilal Nehru, Allahabad: ¿Por qué las empresas repiten preguntas sobre pruebas y entrevistas? ¿No es injusto y significa que cuanto más aprendas las preguntas del año anterior, más posibilidades tendrás de ser seleccionado?