LeetCode: Valid Parentheses

Question

Given a string s 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.

Example 1:
Input: s = "()"
Output: true

Example 2:
Input: s = "()[]{}"
Output: true

Example 3:
Input: s = "(]"
Output: false

Solution

def is_valid(s)
  brackets = { ')' => '(', ']' => '[', '}' => '{' }

  stack = []
  s.each_char do |chr|
    if stack.last && stack.last == brackets[chr]
      stack.pop
    else
      stack << chr
    end
  end
  stack.empty?
end