Este problema puede resolverse mediante programación dinámica.
Supongamos que count (i, j) es el número de formas válidas de llenar las primeras posiciones i de modo que haya j más corchetes de tipo ‘[‘ que de tipo ‘]’. Las formas válidas significarían que es el prefijo de una expresión de paréntesis coincidente y que las ubicaciones en las que hemos forzado los corchetes ‘[‘ han sido satisfechas. Es fácil ver que el conteo (2N, 0) es la respuesta final que necesitamos.
El caso base del DP es que cuenta (1,1) = 1. Debe llenar la primera posición con un corchete ‘[‘, y solo hay una manera de hacerlo. cuenta (1, i) = 0 para i> 1.
- ¿Cuál es el futuro de la música generada por computadora?
- ¿Cuál es la mejor manera de procesar consultas de accesibilidad en un DAG con restricciones?
- Cómo comparar dos cadenas C para igualdad, usando una matriz de caracteres
- ¿Se pueden implementar dfs sin recursividad?
- ¿Cuál es la mejor manera de demostrar sus habilidades como ingeniero de software junior durante una entrevista que no sea la implementación de algoritmos sofisticados y estructuras de datos?
La recurrencia para i> 1 es:
- cuenta (i, 0) = cuenta (i-1,1)
- cuenta (i, j) = cuenta (i-1, j-1) + cuenta (i-1, j + 1) para j> 0
Si i es una ubicación donde hemos forzado un corchete ‘[‘, la recurrencia cambia a:
- cuenta (i, 0) = 0
- cuenta (i, j) = cuenta (i-1, j-1) para j> 0
Usando estas relaciones, la cuenta (2N, 0) se puede encontrar en el tiempo O (N²).