知识点

思路

判断括号序列,可以建一个栈,遇到左括号将其压栈,遇到右括号则取出栈顶元素看是否匹配,如果栈为空或者栈顶元素不匹配则返回false,都匹配好后不可以剩下左括号不匹配,验证栈是否为空。

时间复杂度

只有遍历一遍字符串,时间复杂度为O(n)

AC code(C++)

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    bool is_valid_cow_communication(string s) {
        stack<char> stk;
        for (auto c : s) {
            if (c == '(' or c == '[' or c == '{') stk.push(c);
            else {
                if (stk.empty()) return false;
                auto t = stk.top();
                stk.pop();
                if (!check(t, c)) return false;
            }
        }
        return stk.empty();
    }
    bool check(char x, char y) {
        if (x == '(' and y == ')') return true;
        if (x == '[' and y == ']') return true;
        if (x == '{' and y == '}') return true;
        return false;
    }

};