跳至主要內容

Mr.He小于 1 分钟

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    // 1. 奇数长度直接判断为 false (优化步骤)
    if (s.length % 2 !== 0) return false;

    // 2. 定义括号的映射关系: key 为右括号,value 为对应的左括号
    const map = {
        ')': '(',
        ']': '[',
        '}': '{'
    };

    // 3. 初始化栈
    const stack = [];

    // 4. 遍历字符串
    for (const char of s) {
        // 如果 map[char] 存在,说明当前字符是右括号
        if (map[char]) {
            const topElement = stack.pop()

            // 检查栈顶的左括号是否与当前右括号匹配
            if (topElement !== map[char]) {
                return false;
            }
        } else {
            // 如果不是右括号,说明是左括号,压入栈中
            stack.push(char);
        }
    }

    // 5. 遍历结束后,如果栈为空,说明全部匹配成功
    return stack.length === 0;
};