LeeCode (pila) 20_ paréntesis válidos

LeeCode (pila) 20_ paréntesis válidos

Título:
dada una cadena que solo incluye '(', ')', '{', '}', '[', ']', determine si la cadena es válida.

Una cadena válida debe cumplir:

El paréntesis izquierdo debe cerrarse con el mismo tipo de paréntesis derecho.
El paréntesis de apertura debe cerrarse en el orden correcto.
Tenga en cuenta que una cadena vacía se puede considerar una cadena válida.

Ejemplo 1:

Entrada: "()"
Salida: verdadera
Ejemplo 2:

Entrada: "() [] {}"
Salida: verdadera
Ejemplo 3:

Entrada: "(]"
Salida: falso
Ejemplo 4:

Entrada: "([)]"
Salida: falso
Ejemplo 5:

Entrada: "{[]}"
Salida: verdadera

Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/valid-parentheses Los
derechos de autor son propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.

Ideas de resolución de problemas:

  1. Primero juzgue si la longitud de la cadena es un número par, y si es un número impar, se considera inválido.
  2. Cree un mapa con el paréntesis derecho como clave y el paréntesis izquierdo como valor
  3. Use la clase Deque para crear una pila e implementarla con LinkedList (LinkedList inserta y elimina rápidamente; la consulta aleatoria ArrayList es rápida)
  4. Juzgue si es un paréntesis izquierdo (como: (, [, {), luego empuje la operación de pila; si es un paréntesis derecho, juzgue si la parte superior de la pila es el paréntesis derecho correspondiente, y si el emparejamiento es exitoso , abre la parte superior de la pila.
  5. Al final del ciclo, se juzga si todavía hay paréntesis coincidentes en la pila.

Código Java:

	public boolean isValid(String s) {
    
    
		int len = s.length();
		if(len%2==1)
			return false;
		Map<Character,Character> map = new HashMap<Character,Character>(){
    
    {
    
    
			put(')','(');
			put(']','[');
			put('}','{');
			
		}};
		
		Deque<Character> stack = new LinkedList<Character>();
		for(int i = 0; i < len; i++){
    
    
			char ch = s.charAt(i);
			if(map.containsKey(ch) ){
    
    
				if(map.get(ch)!=stack.peek())
					return false;
				else
					stack.pop();
			}else{
    
    
				stack.push(ch);
			}
		}
		return stack.isEmpty();
	}

Supongo que te gusta

Origin blog.csdn.net/u013456390/article/details/111773357
Recomendado
Clasificación