Topics

bool solve(string &s) {
  int sz = s.length();
  unordered_set<char> push_set = {'(', '[', '{'};
  unordered_map<char, char> pop_set = {{')', '('}, {']', '['}, {'}', '{'}};
  stack<char> st;
 
  for (int i = 0; i < sz; ++i) {
    char curr = s[i];
    if (push_set.count(curr)) {
      st.push(curr);
    } else {
      if(st.empty()){
        return false;
      }
      char top = st.top();
      if (top == pop_set[curr]) {
        st.pop();
      } else {
        return false;
      }
    }
  }
  return st.empty();
}

T.C:
S.C: