LeetCode-20: paréntesis válidos

Título original:

Dada una cadena que contiene solo '(', ')', '{', '}', '[', ']', determine si la cadena es válida.

Una cadena válida debe cumplir:

El soporte izquierdo debe cerrarse con el mismo tipo de soporte derecho.
El soporte izquierdo debe cerrarse en el orden correcto.
Tenga en cuenta que una cadena vacía puede considerarse una cadena válida.

Ideas para resolver problemas:

A través de la observación, se puede encontrar que los paréntesis efectivos tienen al menos un grupo de paréntesis izquierdo y derecho adyacentes entre sí, y luego la subcadena compuesta de paréntesis izquierdo y derecho adyacentes se puede eliminar para juzgar la validez de las partes restantes. (Esto es como calcular un problema matemático usted mismo. Generalmente, el paréntesis más profundo se calcula primero, y luego los paréntesis de la siguiente capa se calculan hasta la última capa). Las ideas de solución específicas son las siguientes:

1. Construya el mapeo entre los corchetes derecho e izquierdo;

2. Construya una pila, recorra la cadena, encuentre el corchete izquierdo y colóquelo en la pila, y el corchete derecho, de acuerdo con la relación de mapeo en el paso 1, determine si el corchete en la parte superior de la pila y el corchete derecho constituyen un corchete válido, si no Composición, devuelve directamente falso. Si es válido, haga estallar el elemento superior de la pila y continúe atravesando; (la estructura de datos de la pila es la última en entrar, primero, de modo que la pila se usa para almacenar los caracteres del corchete atravesado)

3. Determine si la pila final está vacía. Si no está vacía, no es un corchete válido.

Solución:

1  clase Solución {
 2      public  static  boolean isValid (String s) {
 3          HashMap <Character, Character> maps = new HashMap <> ();
4          int len = s.length ();
5          if (len% 2! = 0) devuelve  falso ; // 长度 为 奇数 , 直接 返回 falso
 6          maps.put (')', '(' );
7          mapas.put ('}', '{' );
8          mapas.put (']', '[' );
9          Stack <Character> stack = new Stack <Character> ();
         for ( int i = 0; i <s.length (); i ++ ) {
 11              char c = s.charAt (i);
12              if (maps.containsKey (c)) {
 13                  char topElement = stack.empty ()? '#' : stack.pop ();
14                  if (topElement! = Maps.get (c)) {
 15                      return  false ;
16                  }
 17              } más {
 18                  stack.push (c);
19              }
 20          }
 21          return stack.isEmpty ();
22     }
 23 }

 

Supongo que te gusta

Origin www.cnblogs.com/zhang-yi/p/12757783.html
Recomendado
Clasificación