Skip to content

📚 9.删除无效的括号

💻 代码实现

typescript
/**
 * @url https://leetcode.cn/problems/remove-invalid-parentheses/description/
 */

// ps =================================

/**
 * @param {string} s
 * @return {string[]}
 */
var removeInvalidParentheses = function (s) {
    let l = 0, r = 0 // 左括号需要删除的数量,右括号需要删除的数量
    const set = new Set()
    for (let i = 0; i < s.length; i++) {
        if (s[i] === '(') {
            l++
        } else if (s[i] === ')') {
            if (l > 0) {
                l--
            } else {
                r++
            }
        }
    }

    const dfs = (l, r, idx, score, path) => {
        if (score < 0) return // 小于0代表已经不合法了
        if (idx === s.length) {
            if (score === 0) {
                set.add(path.join(''))
            }
            return
        }
        const word = s[idx]
        if (word === '(') {
            if (l > 0) {
                dfs(l - 1, r, idx + 1, score, [...path])
            }
            path.push(word)
            dfs(l, r, idx + 1, score + 1, [...path])
        } else if (word === ')') {
            if (r > 0) {
                dfs(l, r - 1, idx + 1, score, [...path])
            }
            path.push(word)
            dfs(l, r, idx + 1, score - 1, [...path])
        } else {
            path.push(word)
            dfs(l, r, idx + 1, score, [...path])
        }
    }
    dfs(l, r, 0, 0, [])
    return Array.from(set)
};

Released under the MIT License.