¿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.
- ¿Cuáles son algunos algoritmos de Photoshop?
- Cómo identificar un bucle en una lista vinculada individualmente
- ¿Alguien puede ayudarme a resolver el problema SPOJ "Consulta en un árbol" (QTREE)?
- ¿Cuáles son los algoritmos de geometría computacional que aparecen en los concursos de programación? ¿Cuál de ellos es más frecuente que los demás? ¿Qué estructuras de datos geométricos aparecen en los concursos de programación?
- ¿Por qué el orden de los bucles en el algoritmo Floyd-Warshall es importante para su correcció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.