class Solution {
public:
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    /*
    使用stack 遇到左面的push,遇到右面的先和top对一下
    if(不匹配) {
        return false;
    } else {
        pop, 
    }
    */
    bool isValid(string s) {
        // write code here
        int len = s.size();
        if (len == 0) {
            return true;
        }
        stack<char> sta;
        for (int i = 0; i < len; i++) {
            if (s[i] == '[' || s[i] == '(' || s[i] == '{') {
                sta.push(s[i]);
            }
 
        if (s[i] == ']' || s[i] == ')' || s[i] == '}') {
            if (sta.empty()) {
                return false;
            }
            char top = sta.top();
            if ((s[i] == ']' && top != '[') || (s[i] == ')' && top != '(') || (s[i] == '}' && top != '{')) {
                return false;
            }
            sta.pop();
        }
    }
        
        if (!sta.empty()) {
            return false;
        }
        return true;
    }
};