Permítanme dar una solución con O (n ^ 2) complejidad de tiempo y O (n ^ 2) complejidad de espacio.
Paso 1: construya la matriz P [] [] donde P [i] [j] = verdadero si S [i] .. S [j] es palíndromo, de lo contrario es falso.
Usar programación dinámica
P [i] [j] = P [i + 1] [j-1] && (S [i] == S [j])
- Cómo prepararme para una entrevista para un puesto de diseñador de juegos
- ¿Qué tipo de preguntas se hacen en la prueba de análisis Flipkart?
- ¿Dónde puedo encontrar algunas preguntas de entrevistas en el sitio de Google?
- ¿Qué programa de preparación de entrevistas es mejor?
- ¿Puedo desafiar al entrevistador durante la entrevista técnica?
Caso base
P [i] [i] = verdadero
P [i] [i + 1] = verdadero si (S [i] == S [i + 1])
Toma O (n ^ 2) tiempo y O (n ^ 2) espacio
Paso 2: use la matriz construida en el Paso 1 para encontrar el número mínimo de divisiones.
MinCuts [i] es el número mínimo de divisiones de subcadenas palindrómicas para S [i] .. S [n-1]
(n = longitud de la cadena)
Usar programación dinámica
Inicializar MinCuts [i] = ni
MinCuts [i] = mínimo (MinCuts [i], MinCuts [j] +1 {for j = i + 1 to n}) si P [i] [j-1] == verdadero / * Iterar i desde n-1 a 0 * /
La lógica es si P [i] [j-1] == verdadero, es decir S [i] .. S [j-1] es palíndromo, entonces hay 1 división para la parte S [i] .. S [j-1] y MinCuts [j] se divide para S [j] .. S [n-1]
Caso base
MinCuts [n] = 0
Este paso toma O (n ^ 2) tiempo y O (n) espacio
Al final de esto, el número mínimo de divisiones está en MinCuts [0]
Nota: para una cadena de longitud 1 (n = 1),
MinCuts [1] = 0 (caso base)
MinCuts [0] = 1 – 0 = 1 (inicialización)
MinCuts [0] sigue siendo 1 como
MinCuts [0] = mínimo (MinCuts [0], MinCuts [1] +1) / * P [0] [0] == verdadero * /
= mínimo (1, 1)
= 1
Entonces, el resultado es correcto.