-
Notifications
You must be signed in to change notification settings - Fork 0
/
0301-remove-invalid-parentheses.swift
50 lines (44 loc) · 1.5 KB
/
0301-remove-invalid-parentheses.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class Solution {
func removeInvalidParentheses(_ string: String) -> [String] {
var output = Set<String>()
@_optimize(speed)
func helper(_ s: [Character], _ l: Int, _ r: Int, _ pars: [Character]) {
var stack: Int = 0
var (left, right) = (l, r)
for i in r..<s.count {
let char = s[i]
right = i
if char == pars[0] {
stack += 1
} else if char == pars[1] {
stack -= 1
}
if stack < 0 { break }
}
if stack < 0 {
while left<=right {
let char = s[left]
if char != pars[1] { left += 1; continue }
if left > 0 && char == s[left-1] { left += 1; continue }
var substring = s
substring.remove(at:left)
helper(
substring,
left,
right,
pars
)
left += 1
}
} else if stack > 0 {
helper(Array(s.reversed()), 0, 0, [")", "("])
} else {
let res = pars[0] == "(" ? s : Array(s.reversed())
let stringRes = String(res)
output.insert(stringRes)
}
}
helper(Array(string), 0, 0, ["(",")"])
return Array(output)
}
}