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

Example 1:

Input: s = "()"
Output: true

Example 2:

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

Example 3:

Input: s = "(]"
Output: false

Example 4:

Input: s = "([)]"
Output: false

Example 5:

Input: s = "{[]}"
Output: true

Constraints:

  • 1 <= s.length <= 10^4
  • s consists of parentheses only '()[]{}'.

Solution

Time complexity : O(n)
Space complexity : O(n)

class Solution {
public:
    bool isValid(string s) {
        stack<char> stk;
        for (char c: s) {
            switch (c) {
                case '(': stk.push(')'); break;
                case '[': stk.push(']'); break;
                case '{': stk.push('}'); break;
                default:
                    if (stk.empty() || c != stk.top()) return false;
                    else stk.pop();
            }
        }
        return stk.empty();
    }
};