Categorías
Algorithms Interview Java

LeetCode – Particionamiento Palindrome II (Java)

Dada una cadena s, la partición es tal que cada subcadena de la partición sea un palíndromo. Devuelva los cortes mínimos necesarios para un tabique palíndromo de s. Por ejemplo, dado s = «aab», devuelve 1 ya que la partición palíndromo [«aa»,»b»] podría producirse con 1 corte.

Análisis

Este problema es similar al particionamiento Palindrome. Puede resolverse de manera eficiente mediante el uso de programación dinámica. A diferencia del «Particionamiento Palindrome», necesitamos mantener dos matrices de caché, una rastrea la posición de la partición y la otra rastrea el número de corte mínimo.

Solución Java

public int minCut(String s) {
    int n = s.length();
 
	boolean dp[][] = new boolean[n][n];
	int cut[] = new int[n];
 
	for (int j = 0; j < n; j++) {
		cut[j] = j; //set maximum # of cut
		for (int i = 0; i <= j; i++) {
			if (s.charAt(i) == s.charAt(j) && (j - i <= 1 || dp[i+1][j-1])) {
				dp[i][j] = true;
 
				// if need to cut, add 1 to the previous cut[i-1]
				if (i > 0){
					cut[j] = Math.min(cut[j], cut[i-1] + 1);
				}else{
				// if [0...j] is palindrome, no need to cut    
					cut[j] = 0; 
				}	
			}
		}
	}
 
	return cut[n-1];
}

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *