NC52.有效括号序列

class Solution {
public:
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    bool isValid(const string& s) {
        // write code here
        const std::unordered_map<char, char> brackets {
            {')', '('}, {'}', '{'}, {']', '['}
        };
        std::stack<char> st;
        for (auto& i : s) {
            auto itor = brackets.find(i);
            if (itor != brackets.end() && !st.empty() && st.top() == itor->second) {
                st.pop();
                continue;
            }
            st.push(i);
        }
        return st.empty();
    }
};

解题思路:

难点1:栈的最基础应用之一,括号匹配,能看出用栈基本就成了一半;

难点2:unordered_map的使用会精简代码;

知识点:

知识点1:C++中stack详解

#include <stack>

//empty()			堆栈为空则返回真
//pop()			移除栈顶元素
//push()			在栈顶增加元素
//size()			返回栈中元素数目
//top()			返回栈顶元素

std::stack<char> st;
st.top();
st.pop();
st.push(i);
st.empty();