NC175 合法的括号字符串

120 阅读1分钟

image.png

image.png

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param s string字符串
 * @return bool布尔型
 */
function isValidString(s) {
    // 用两个堆栈来维护未匹配的左括号和星号
    const leftStack = [];
    const starStack = [];

    for (let i = 0; i < s.length; i++) {
        const c = s[i];

        if (c === "(") {
            leftStack.push(i);
        } else if (c === "*") {
            starStack.push(i);
        } else if (c === ")") {
            // 先从未匹配的左括号堆栈中出栈匹配
            if (leftStack.length > 0) {
                leftStack.pop();
            }
            // 再从未匹配的星号堆栈中出栈匹配
            else if (starStack.length > 0) {
                starStack.pop();
            } else {
                // 有多余的 ) 直接返回 false
                return false;
            }
        }
    }

    // 检查未匹配的左括号堆栈是否为空
    while (leftStack.length > 0 && starStack.length > 0) {
        const leftIndex = leftStack.pop();
        const starIndex = starStack.pop();

        if (leftIndex > starIndex) {
            return false;
        }
    }

    // 返回 ( 栈的值
    return leftStack.length === 0;
}

module.exports = {
    isValidString: isValidString,
};

合法的括号字符串_牛客题霸_牛客网 (nowcoder.com)