69.有效的括号

3 阅读1分钟

题目链接

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。

  2. 左括号必须以正确的顺序闭合。

  3. 每个右括号都有一个对应的相同类型的左括号。

解法 栈辅助

思路

如果遇到左括号,我们就将其入栈,因为后续还是可以添加其他的字符。

如果遇到右括号,我们需要看看栈顶的字符是不是相应的左括号,如果不是,那说明不是有效的括号。

代码

function isValid(s: string): boolean {
    if (s.length % 2 !== 0) {
        return false;
    }

    const stack = [];
    const rtMap = {
        '}': '{',
        ']': '[',
        ')': '('
    };
    for (let char of s) {
        if (rtMap[char]) {
            if (stack[stack.length - 1] !== rtMap[char]) {
                return false;
            } else {
                stack.pop();
            }
        } else {
            stack.push(char);
        }
    }

    return stack.length === 0;
};

时空复杂度

时间复杂度:O(n)

空间复杂度:O(n)