Algoritmo: Coincidir con paréntesis válidos 20. Paréntesis válidos

Para obtener la colección completa de LeetCode, consulte: Colección LeetCode Github

tema

20. Los paréntesis válidas
Dada una cadena s que contienen sólo los caracteres '(', ')', '{', '}', '['y ']', determinar si la cadena de entrada es válida.

Una cadena de entrada es válida si:

Los corchetes abiertos deben cerrarse con el mismo tipo de corchetes.
Los corchetes abiertos deben cerrarse en el orden correcto.

Ejemplo 1:

Input: s = "()"
Output: true

Ejemplo 2:

Input: s = "()[]{}"
Output: true

Ejemplo 3:

Input: s = "(]"
Output: false

Ejemplo 4:

Input: s = "([)]"
Output: false

Ejemplo 5:

Input: s = "{[]}"
Output: true

Restricciones:

1 <= s.length <= 104
s consists of parentheses only '()[]{}'.

Solución de pila

Haga coincidir los paréntesis izquierdo y derecho, use la pila para resolver,

  1. Cuando el paréntesis izquierdo se coloca en la pila;
  2. Cuando se abre el paréntesis derecho, se juzga si el paréntesis izquierdo es del mismo tipo. Si la pila está vacía o no coincide, devuelve falso;
  3. Después del final, si la pila Stack está vacía, coincide con verdadero.
class Solution {
    
    
    public boolean isValid(String s) {
    
    
        // check edge
        if (s == null || s.length() == 0) {
    
    
            return true;
        }
        
        Stack<Character> stack = new Stack<>();
        Map<Character, Character> map = new HashMap<>();
        map.put(')', '(');
        map.put('}', '{');
        map.put(']', '[');
        
        char[] chars = s.toCharArray();
        for(char c: chars) {
    
    
            if (c == '(' || c == '{' || c == '[') {
    
    
                stack.push(c);
                continue;
            }
            
            if (stack.isEmpty() || stack.pop() != map.get(c)) return false;
        }
        
        return stack.isEmpty();
    }
}

Supongo que te gusta

Origin blog.csdn.net/zgpeace/article/details/113059486
Recomendado
Clasificación