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(Aconcatenated withB), whereAandBare valid strings, or - It can be written as
(A), whereAis 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 <= 1000Sonly 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
}