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:

  1. Open brackets must be closed by the same type of brackets.
  2. 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