有效的括号 - 力扣

20. 有效的括号

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

 

示例 1:

输入:s = "()"
输出:true

示例 2:

输入:s = "()[]{}"
输出:true

示例 3:

输入:s = "(]"
输出:false

示例 4:

输入:s = "([)]"
输出:false

示例 5:

输入:s = "{[]}"
输出:true

 

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成
#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    bool isValid(string s) {
        if (s.length() % 2 != 0) {
            return false;
        } else {
            unordered_map <char, char> mapSign = {
                    {')', '('},
                    {']', '['},
                    {'}', '{'},
            };
            stack<char> stk;
            for(char c : s) {
                // 右括号处理规则
                if (mapSign.count(c)) {
                    // 空栈 || 栈顶元素(左括号)与当前右括号不匹配
                    if (stk.empty() || stk.top() != mapSign[c]) {
                        return false;
                    }
                    // 左右括号匹配正确,左括号顺序出栈
                    stk.pop();
                } else {
                    // 左括号入栈
                    stk.push(c);
                }
            }
            return stk.empty();
        }
    }
};

int main() {
    string s;
    while (cin >> s) {
        Solution solution;
        cout << solution.isValid(s) << endl;
    }
    return 0;
}

 

上一篇:前序遍历


下一篇:leecode 150. 逆波兰表达式求值(栈)