Cómo resolver un problema de coincidencia de patrones de cadena sin usar funciones de expresión regular incorporadas

¿Cómo resuelvo un problema de coincidencia de patrón de cadena sin usar las funciones de expresión regular incorporadas?

Lo primero que debes hacer es preguntarte por qué lo estás haciendo sin expresiones regulares. Usa regex si puedes. (Hay buenas razones por las que quizás no lo haga, como “Esta es una entrevista y no puedo” o “Tengo curiosidad por saber cómo hacerlo”).

Dado el patrón ab * dc? donde * asigna 0 a caracteres infinitos y? se asigna exactamente a un carácter, determina si una cadena coincide con este patrón.

Eche un vistazo a su patrón que desea hacer coincidir aquí e intente leerlo en inglés. Esto es lo que leí: “ver si una cadena comienza con ‘ab’ y termina con ‘dc ‘.

Claramente, la cadena no debe ser nula y tener una longitud de 5 o mayor.

Sería bastante simple en ese punto comparar cada uno de los 4 caracteres que tiene que unir.

Si estaba haciendo una pregunta más general (como cómo escribir una clase de coincidencia de cadenas que coincida con un patrón arbitrario), probablemente desee pensar en términos de “contiene” si el patrón contiene varios comodines.

Entonces “ab * cd * ef * ghi” coincidiría con una cadena que comienza con ab y termina con ghi que también contiene cd (comenzando después de ab) y ef (comenzando después de cd). Debe contener al menos 9 caracteres.

O “*? Abc * def * ghi *” coincidiría con una cadena que contiene cualquier carácter seguido de abc, y también contiene def (que comienza después de abc) y ghi (que comienza después de def). Debe contener al menos 10 caracteres.

Los lenguajes regulares se corresponden con máquinas de estado finito.

Algo divertido que aprendí recientemente de Andrea Ferro, ya que todas las computadoras reales son en realidad máquinas de estados finitos (no máquinas de Turing, debido a la falta de memoria infinita), ¡solo pueden coincidir con los idiomas normales!

More Interesting

¿En qué se diferencia una tabla hash de una lista vinculada o una matriz?

¿Cuántas veces aparece el número 1 en una serie de números del 1 al N? Necesito una explicación lógica, no una usando la computadora.

¿Cuál es el libro perfecto sobre CPP y algoritmos?

Si hago algunos cálculos iterando sobre el bucle mientras tomo las entradas. A partir de entonces, imprimiendo el resultado. ¿Puedo decir que es O (1) complejidad?

¿Cómo es diferente la cola circular del algoritmo de inserción?

¿Cuál es un buen algoritmo de coincidencia para palabras mal escritas?

¿Qué algoritmos debo saber para poder resolver la pregunta de Aprendizaje automático / Ciencia de datos de CodeSprint 5 en HackerRank?

¿Cómo se almacenan las imágenes en Ram como una matriz bidimensional de bytes que representan un píxel?

¿Se puede usar el algoritmo DBSCAN para determinar los límites del área geográfica?

¿Cuál es la explicación teórica más fácil posible sobre el algoritmo de clasificación de burbujas y el programa que usa C, ya que soy un viejo estudiante de 50 años completamente nuevo en programación?

¿Cómo un programa de razonamiento poco preciso asigna 8 gb de memoria en 3 segundos?

¿Los algoritmos de aprendizaje profundo representan métodos basados ​​en conjuntos?

¿Cómo puede una persona que no está en el mundo académico presentar pruebas correctas de que NP = O (n), la jerarquía polinómica se colapsa y existe un algoritmo eficiente de O (n) para resolver cualquier problema sin causar caos y pánico masivo porque se rompería todo el cifrado?

¿Qué tipo de algoritmo de Machine Learning debería usar para un robot que ve?

En algoritmos, ¿cuál es el límite superior e inferior?