Brackets efectivos Leikou 20 (implementación de pila)

1. Título

Inserte la descripción de la imagen aquí

2. Mis pensamientos y problemas iniciales

1. Resuma algunos puntos de conocimiento antes de escribir ideas:
(1) Para String s, obtenga la longitud
por s.length()método para
char c = s.charAt(i);obtener el carácter, i es el índice a partir de 0
(2) Para la
creación de la pila :, Stack<Character> stack = new Stack<>();preste atención a la clase de empaquetado Carácter , para char
Empujar stack.push(c);
en la pila: salir de la pila: stack.pop();
juzgar vacío y juzgar el elemento superior de la pila:
if(!stack.isEmpty() && stack.peek()== ‘(’){...}

2. Ideas
(1) La longitud de la cadena debe ser un número doble, es decir, s.length ()% 2 == 0; de lo contrario, devolverá falso directamente.
(2) Cuando el carácter c es ([{Estos tres símbolos, ejecute la pila push(c)
(3) Cuando c es tres tipos de paréntesis derechos, analícelos por separado. Compruebe si la pila está vacía y si peek () en la parte superior de la pila es el paréntesis izquierdo correspondiente. stack, de lo contrario devuelve falso.

3. Problemas después de ejecutar el código que escribí :
(1) Escriba c == '(' como comillas dobles. Tenga en cuenta que c es un tipo char. Deben usarse comillas simples y comillas dobles para cadenas. Preste atención a esto, no preste atención. Es fácil de ignorar.
(2) Después de escribir el código, se olvida return stack.isEmpty()y se encuentra después de la autoinspección. Después del recorrido, se ejecuta la pila vacía y el paréntesis efectivo es la pila vacía.

3. Método de resolución de problemas uno: apilar

Directamente en el código escrito por usted mismo:

class Solution {
    
    
    public boolean isValid(String s) {
    
    
        Stack<Character> stack = new Stack<>();
        //字符串包含的字符数能被2整除
        if(s.length() % 2 == 0){
    
    
            for(int i = 0;i < s.length();i++){
    
    
                char c = s.charAt(i);
                if(c == '(' || c== '[' || c == '{'){
    
    
                    //入栈
                stack.push(c);
                }else if(c == ')'){
    
    
                    if(!stack.isEmpty() && stack.peek() == '('){
    
    
                        stack.pop();
                    }else{
    
    
                        return false;
                    }
                }else if(c == ']'){
    
    
                    if(!stack.isEmpty() && stack.peek() == '['){
    
    
                        stack.pop();
                    }else{
    
    
                        return false;
                    }
                }else{
    
    
                    if(!stack.isEmpty() && stack.peek() == '{'){
    
    
                        stack.pop();
                    }else{
    
    
                        return false;
                    }
                }
                
            }
            //这一句不要忘记,一开始漏掉了
            return stack.isEmpty(); 
        }
        return false;
    }
}

La solución oficial del problema usa HashMap en la pila. La solución del problema es similar a la que escribí yo mismo, pero la forma de almacenamiento de datos es diferente. El código oficial también se pone:

class Solution {
    
    
    public boolean isValid(String s) {
    
    
        int n = s.length();
        if (n % 2 == 1) {
    
    
            return false;
        }

        Map<Character, Character> pairs = new HashMap<Character, Character>() {
    
    {
    
    
            put(')', '(');
            put(']', '[');
            put('}', '{');
        }};
        Deque<Character> stack = new LinkedList<Character>();
        for (int i = 0; i < n; i++) {
    
    
            char ch = s.charAt(i);
            if (pairs.containsKey(ch)) {
    
    
                if (stack.isEmpty() || stack.peek() != pairs.get(ch)) {
    
    
                    return false;
                }
                stack.pop();
            } else {
    
    
                stack.push(ch);
            }
        }
        return stack.isEmpty();
    }
}

Supongo que te gusta

Origin blog.csdn.net/ambitionLlll/article/details/113943559
Recomendado
Clasificación