【题目】Estructura de datos: compruebe si los símbolos aparecen en pares

Dada una cadena que consta solo de '(', ')', '{', '}', '[', ']', determine si la cadena es válida.
Las cadenas de caracteres válidas deben cumplir:
(1) El corchete de apertura debe cerrarse con el mismo tipo de corchete de cierre.
(2) Los paréntesis izquierdos deben cerrarse en el orden correcto.
Por ejemplo, "()", "()[]{}", "{[]}" son todas cadenas válidas, pero "(]", "([)]" no lo son.

Podemos usar stack Stack para resolver este problema.
(1) Primero, almacenamos las reglas correspondientes entre paréntesis en Mapa;
(2) Crea una pila. Recorra la cadena, si el carácter es un paréntesis izquierdo, se agregará directamente a la pila; de lo contrario, compare el elemento superior de la pila con el paréntesis y devuelva falso si no son iguales. El recorrido termina, si la pila está vacía, devuelve verdadero.

public class Test {
    
    

    public static void main(String[] args) {
    
    
        System.out.println("()[]{}  符号是否成对出现:" + isValid("()[]{}"));
        System.out.println("{[]}    符号是否成对出现:" + isValid("{[]}"));
        System.out.println("(]      符号是否成对出现:" + isValid("(]"));
        System.out.println("([)]    符号是否成对出现:" + isValid("([)]"));
    }

    public static boolean isValid(String s){
    
    
        // 括号之间的对应规则
        HashMap<Character, Character> mappings = new HashMap<Character, Character>();
        mappings.put(')', '(');
        mappings.put('}', '{');
        mappings.put(']', '[');

        Stack<Character> stack = new Stack<Character>();

        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
    
    
            /**
             * 如果字符不是右半部分(是左半部分)则压入栈中
             */
            if (mappings.containsKey(chars[i])) {
    
    
                char topElement = stack.empty() ? '#' : stack.pop();
                /**
                 * 将当前字符与栈顶进行比较
                 */
                if (topElement != mappings.get(chars[i])) {
    
    
                    return false;
                }
            } else {
    
    
                stack.push(chars[i]);
            }
        }
        return stack.isEmpty();
    }

}

La salida es:

()[]{
    
    }  符号是否成对出现:true
{
    
    []}    符号是否成对出现:true
(]      符号是否成对出现:false
([)]    符号是否成对出现:false

Supongo que te gusta

Origin blog.csdn.net/qq_29229567/article/details/127495841
Recomendado
Clasificación