算法列表

678. 有效的括号字符串 中等

布莱克2026-03-18 14:07贪心

问题:

给你一个只包含三种字符的字符串,支持的字符类型分别是 '('')''*'。请你检验这个字符串是否为有效字符串,如果是 有效 字符串返回 true

有效 字符串符合如下规则:

  • 任何左括号 '(' 必须有相应的右括号 ')'
  • 任何右括号 ')' 必须有相应的左括号 '('
  • 左括号 '(' 必须在对应的右括号之前 ')'
  • '*' 可以被视为单个右括号 ')' ,或单个左括号 '(' ,或一个空字符串 ""

示例 1:

输入:s = "()"
输出:true

示例 2:

输入:s = "(*)"
输出:true

示例 3:

输入:s = "(*))"
输出:true

回答:

维护一个范围,待匹配的左括号的最小数量,以及最大数量

var checkValidString = function(s) {
    //low为最少有多少左括号待匹配
    let low = 0;
    //最多有多少左括号待匹配
    let high = 0;
    for (let ch of s) {
        if (ch == '(') {
            low++;
            high++;
        } else if (ch ==')') {
            low = low - 1 < 0 ? 0 : low - 1;
            high--;
            if (high < 0) {
                return false;
            }
        } else {
            high++;
            low = low - 1 < 0 ? 0 : low - 1;
        }
    }
    return low == 0 ? true : false;
};


assistant