Minimum Add to Make Parentheses Valid
Description
Given a string S
of '('
and ')'
parentheses, we add the minimum number of parentheses ( '('
or ')'
, and in any positions ) so that the resulting parentheses string is valid.
Formally, a parentheses string is valid if and only if:
- It is the empty string, or
- It can be written as
AB
(A
concatenated withB
), whereA
andB
are valid strings, or - It can be written as
(A)
, whereA
is a valid string.
Given a parentheses string, return the minimum number of parentheses we must add to make the resulting string valid.
Example 1:
Input: "())" Output: 1
Example 2:
Input: "(((" Output: 3
Example 3:
Input: "()" Output: 0
Example 4:
Input: "()))((" Output: 4
Note:
S.length <= 1000
S
only consists of'('
and')'
characters.
Solution(javascript)
// O(n) time O(n) space
// const minAddToMakeValid = (S = '') => {
// const isPair = (left, right) => left === '(' && right === ')'
// const stack = []
// for (const c of S) {
// if (isPair(stack[stack.length - 1], c)) {
// stack.pop()
// } else {
// stack.push(c)
// }
// }
// return stack.length
// }
const minAddToMakeValid = (S = '') => {
let left = 0
let right = 0
for (let i = 0; i < S.length; i++) {
if (S[i] === '(') {
left += 1
} else if (S[i] === ')') {
if (left > 0) {
left -= 1
} else {
right += 1
}
}
}
return left + right
}