class Solution {
public:
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    bool isValid(string s) {
        // write code here
        stack<char> stack1;
        for (int i = 0; i < s.length(); i++)
        {
            if (s[i] == '(' || s[i] == '{' || s[i] == '[')
                stack1.push(s[i]);

            // 如果栈空了,此时的右括号无前面的左括号对应,说明不符合规则
            if (s[i] == ')' || s[i] == '}' || s[i] == ']')
                if (stack1.empty())
                    return false;

            if (s[i] == ')')
            {
                if (stack1.top() != '(')
                    return false;
                stack1.pop();
            }

            if (s[i] == '}')
            {
                if (stack1.top() != '{')
                    return false;
                stack1.pop();
            }

            if (s[i] == ']')
            {
                if (stack1.top() != '[')
                    return false;
                stack1.pop();
            }

        }
        // 如果栈不空,即左括号无对应的有括号,说明字符串不符合规则
        if (!stack1.empty())
            return false;
        return true;
    }
};