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,
- Cuando el paréntesis izquierdo se coloca en la pila;
- 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;
- 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();
}
}