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