class Solution {
public boolean isValid(String s) {
Deque<Character> stack = new ArrayDeque<>();
for(char c : s.toCharArray()){
if(c == '{'){
stack.push('}');
}else if( c == '('){
stack.push(')');
}else if( c == '['){
stack.push(']');
}else{
if(stack.isEmpty() || c != stack.pop()){
return false;
}
}
}
return stack.isEmpty();
}
}
Three pairs
{}
[]
()
If we see {, we push } into the stack
If we see [, we push ] into the stack
If we see (, we push ) into the stack
If we see current = }, ], ), we check if the top of the stack matches the the current
Before we pop the stack, always remember to check if the stack is empty or not
If it’s empty then its false
If its not empty and the stack pop () != current , then false
Finally , after done traversing all the char in the string, check if the stack is empty.
If its not empty, then it means we don’t have a set of balanced parentheses , then return false
Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
An input string is valid if:
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
Example 1:
Input: "()"
Output: true
Example 2:
Input: "()[]{}"
Output: true
Example 3:
Input: "(]"
Output: false
Example 4:
Input: "([)]"
Output: false
Example 5:
Input: "{[]}"
Output: true