https://leetcode.cn/problems/valid-parentheses/description/

整理好不匹配的情况有哪些种类,写代码就顺畅了。使用栈进行实现还是比较简单的

<aside> 💡

不匹配的情况:

  1. 匹配错误
  2. 左括号多了——最后栈中还有元素剩余
  3. 右括号多了——需要匹配但栈是空的 </aside>
// 将需要匹配的左括号存入栈
// 遇到右括号时将栈顶弹出并与右括号匹配
// 如果匹配失败或是最后栈中还有元素剩下说明字符串不是有效的
bool isValid(string s) {
		// 可以进行剪枝:如果字符串长度是奇数,则一定有不匹配的括号
		if (s.size() % 2 == 1)
				return false;
		
    stack<int> stk;
    for (char c : s) {
        switch (c) {
        case ')': {
            if (stk.empty() || stk.top() != '(') {
                return false;
            }
            stk.pop();
            break;
        }
        case '}': {
            if (stk.empty() || stk.top() != '{') {
                return false;
            }
            stk.pop();
            break;
        }
        case ']': {
            if (stk.empty() || stk.top() != '[') {
                return false;
            }
            stk.pop();
            break;
        }
        default: {
            stk.push(c);
        }
        }
    }
    return stk.empty();
}