20. 有效的括号

20. 有效的括号 - 力扣(LeetCode)

二刷

class Solution {
public:
  bool isValid(string s) {
    stack<char> S;
    for (int i = 0; i < s.size(); ++i) {
      if (s[i] == '(' || s[i] == '[' || s[i] == '{')
        S.push(s[i]);

      if (s[i] == ')') {
        // Remember to check for emptyness.
        if (S.empty() || S.top() != '(')
          return false;
        S.pop();
      }
      if (s[i] == ']') {
        if (S.empty() || S.top() != '[')
          return false;
        S.pop();
      }
      if (s[i] == '}') {
        if (S.empty() || S.top() != '{')
          return false;
        S.pop();
      }
    }
    // Here also.
    return S.empty();
  }
};

没什么好说的,注意过程判空以及结果判空即可。

三刷

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