| 123456789101112131415161718192021222324252627282930313233343536373839404142 | var empty struct{} = struct{}{}func removeInvalidParentheses(s string) (res []string) {	l, r := 0, 0	for _, c := range s {		if c == '(' {			l++		} else if c == ')' {			if l == 0 {				r++			} else {				l--			}		}	}	set := make(map[string]struct{})	dfs(&set, s, []byte{}, 0, l, r, 0)	for k, _ := range set {		res = append(res, k)	}	return}func dfs(set *map[string]struct{}, s string, pre []byte, pos, l, r, cnt int) {	n := len(s)	if pos == n && l == 0 && r == 0 && cnt == 0 {		(*set)[string(pre)] = empty		return	} else if cnt < 0 || l < 0 || r < 0 || pos == n {		return	}	if s[pos] == '(' {		dfs(set, s, pre, pos+1, l-1, r, cnt) // Delete '('		dfs(set, s, append(pre, '('), pos+1, l, r, cnt+1)	} else if s[pos] == ')' {		dfs(set, s, pre, pos+1, l, r-1, cnt) // Delete ')'		dfs(set, s, append(pre, ')'), pos+1, l, r, cnt-1)	} else {		dfs(set, s, append(pre, s[pos]), pos+1, l, r, cnt)	}}
 |