Categorías
Algorithms

LeetCode – Eliminar paréntesis no válidos (Java)

Elimine el número mínimo de paréntesis no válidos para que la cadena de entrada sea válida. Devuelve todos los resultados posibles.

Nota: La cadena de entrada puede contener letras distintas del paréntesis (y).

Ejemplos:
«() ()) ()» -> [«()()()», «(())()»]

«(a) ()) ()» -> [«(a)()()», «(a())()»]

«) (» -> [«»]

Solución Java

Este problema se puede resolver utilizando DFS.

public class Solution {
    ArrayList<String> result = new ArrayList<String>();
    int max=0; 
 
    public List<String> removeInvalidParentheses(String s) {
        if(s==null)
            return result;
 
        dfs(s, "", 0, 0);
        if(result.size()==0){
            result.add("");
        }
 
        return result;
    }
 
    public void dfs(String left, String right, int countLeft, int maxLeft){
        if(left.length()==0){
            if(countLeft==0 && right.length()!=0){
                if(maxLeft > max){
                    max = maxLeft;
                }
 
                if(maxLeft==max && !result.contains(right)){
                    result.add(right);
                }
            }
 
            return;
        }
 
        if(left.charAt(0)=='('){
            dfs(left.substring(1), right+"(", countLeft+1, maxLeft+1);//keep (
            dfs(left.substring(1), right, countLeft, maxLeft);//drop (
        }else if(left.charAt(0)==')'){
            if(countLeft>0){
                dfs(left.substring(1), right+")", countLeft-1, maxLeft);
            }
 
            dfs(left.substring(1), right, countLeft, maxLeft);
 
        }else{
            dfs(left.substring(1), right+String.valueOf(left.charAt(0)), countLeft, maxLeft);
        }
    }
}

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 *