---
# System prepended metadata

title: 20. Valid Parentheses
tags: [C++, LeetCode-Easy]

---

# 20. Valid Parentheses
Difficulty: Easy

## Solution

```cpp=
/**
*** Author: R-CO
*** E-mail: daniel1820kobe@gmail.com
*** Date: 2020-10-30
**/
#include <cstdlib>
#include <iostream>
using std::cout;
using std::endl;
#include <stack>
using std::stack;
#include <string>
using std::string;
#include <vector>
using std::vector;

struct TestCasesStruct {
  string input;
  bool expected_output;
};

class Solution {
 public:
  static bool isValid(string s) {
    stack<char> char_stack;
    for (auto c : s) {
      switch (c) {
        case '(':
        case '[':
        case '{': {
          char_stack.push(c);
        } break;

        case ')': {
          if (!operateWithStack('(', char_stack)) {
            return false;
          }
        } break;
        case ']': {
          if (!operateWithStack('[', char_stack)) {
            return false;
          }
        } break;
        case '}': {
          if (!operateWithStack('{', char_stack)) {
            return false;
          }
        } break;
      }
    }

    return (char_stack.empty()) ? true : false;
  }

 private:
  inline static bool operateWithStack(const char left_parenthese,
                                      stack<char> &char_stack) {
    if (char_stack.empty() || char_stack.top() != left_parenthese) {
      return false;
    }

    char_stack.pop();
    return true;
  }
};

int main(int argc, char *argv[]) {
  vector<TestCasesStruct> test_cases = {{"()", true},
                                        {"()[]{}", true},
                                        {"(]", false},
                                        {"([)]", false},
                                        {"}", false}};

  size_t case_index = 0;
  for (auto &test_case : test_cases) {
    if (Solution::isValid(test_case.input) == test_case.expected_output) {
      cout << "Case [" << case_index << "] is pass" << endl;
    } else {
      cout << "Case [" << case_index << "] is fail" << endl;
    }

    ++case_index;
  }

  return EXIT_SUCCESS;
}


```

## Result

Success
Details 
Runtime: 0 ms, faster than 100.00% of C++ online submissions for Valid Parentheses.
Memory Usage: 6.7 MB, less than 35.41% of C++ online submissions for Valid Parentheses.

###### tags: `LeetCode-Easy` `C++`
