1. 程式人生 > 其它 >leetcode301.刪除無效字元

leetcode301.刪除無效字元

leetcode301.刪除無效字元

題目

給你一個由若干括號和字母組成的字串 s ,刪除最小數量的無效括號,使得輸入的字串有效。

返回所有可能的結果。答案可以按 任意順序 返回。

用例

輸入:s = "()())()"
輸出:["(())()","()()()"]
輸入:s = "(a)())()"
輸出:["(a())()","(a)()()"]
輸入:s = ")("
輸出:[""]

求解

/**
 * @param {string} s
 * @return {string[]}
 */
var removeInvalidParentheses = function(s) {
    let mySet = new Set()
    let maxlength = 0
    let res = []
    dfs(0,0,0,s,'')
    for(let v of mySet){
        if(v.length==maxlength){
            res.push(v)
        }
    }
    return res

    function dfs(left,right,index,str,curr){
        if(right==left){
            mySet.add(curr)
            maxlength = Math.max(maxlength,curr.length)
        }
        if(right>left||index==str.length){
            return
        }
        if(str[index]=='('){
            dfs(left+1,right,index+1,str,curr+'(')
            dfs(left,right,index+1,str,curr)
        }else if(str[index]==')'){
            dfs(left,right+1,index+1,str,curr+')')
            dfs(left,right,index+1,str,curr)
        }else{
            dfs(left,right,index+1,str,curr+str[index])
        }
    }
};