移除无效的括号
Github链接
- 遇到"("入栈
- 遇到")“,看栈是否为空,栈为空,则删除当前元素
栈不为空,则拿出栈顶元素进行比较
如果栈顶元素能凑成一对”()",则移除栈顶元素 - 遍历完成后,再看栈中的元素
- 存储栈的时候,用字典来存储,这样可以记录索引
- 删除的时候,从后往前删除,不要破坏索引的结构
class facebook_01 {
func minRemoveToMakeValid(_ s: String) -> String {
var arr = Array(s).map{String($0)}
var stack = [[Int: String]]()
var left = 0
while left < arr.count {
if stack.isEmpty {
if arr[left] == ")" {
arr.remove(at: left)
} else {
if arr[left] == "(" {
let dict = [left: "("]
stack.append(dict)
}
left += 1
}
} else {
let topEle = stack[stack.count - 1]
if topEle.first!.value == "(" && arr[left] == ")" {
stack.removeLast()
}
if arr[left] == "(" {
let dict = [left: "("]
stack.append(dict)
}
left += 1
}
}
if !stack.isEmpty {
for i in (0..<stack.count).reversed() {
arr.remove(at: stack[i].first!.key)
}
}
return arr.reduce("", +)
}
}