Well,发现自己的解题思路还是有问题

遇到左括号直接压栈处理,遇到右括号,再看栈顶,若是匹配,则弹出

最后栈如果为空,那就相当于完全处理完毕了,直接返回true

class Solution {
public:
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
bool isValid(string s) {
    // write code here
    stack<char> stk;
    char p = ' ';
    for(int i = 0;i < s.size();i++) {
        //左括号统一入栈
        if(s[i] == '('||s[i] == '['||s[i] == '{') {
            stk.push(s[i]);
        }
        //
        else if(s[i] == ')')
        {
            //栈顶为空,说明永远不会再有左括号了,所以直接false
            if(stk.empty()) return false;
            if(stk.top() == '(') stk.pop();
        }
        else if(s[i] == '}') {
            if(stk.empty()) return false;
            if(stk.top() == '{')  stk.pop();
        }
        else if(s[i] == ']') {
            if(stk.empty()) return false;
            if(p = stk.top() == '[') stk.pop();
        }
    }
    // 此时栈顶为空,说明所以元素处理完毕啦,直接返回true
    if(stk.empty()) {
        return true;
    }
    return false;
}

};