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])
        }
    }
};