close
close

921. Minimum addition to make parentheses valid

921. Minimum addition to make parentheses valid

921. Minimum addition to make parentheses valid

Difficulty: Medium

Topics: String, Stack, Greedy

A string in parentheses is valid if and only if:

  • It’s the empty string,
  • It can be written as AB (A concatenated with B), Where A And B are valid strings, or
  • It can be written as (A)Where A is a valid string.

You will get a series of brackets s. In one motion, you can insert a parenthesis at any position of the string.

  • For example if s = "()))"you can insert an opening parenthesis "(()))" or be a closing parenthesis "())))".

Yield the minimum number of moves required to make s valid.

Example 1:

  • Input: s = “())”
  • Exit: 1

Example 2:

  • Input: s = “(((“
  • Exit: 3

Limits:

  • 1
  • s(i) is neither '(' or ')'.

Solution:

We need to determine how many opening or closing parentheses to add to create the input string s valid. A valid string means that any opening parenthesis '(' has a corresponding closing parenthesis ')'.

We can solve this problem using a simple counter-approach:

  • We use a variable balance to keep track of the current balance between opening and closing brackets.
  • We use a different variable additions to count the minimum required number of brackets.

Approximation:

  1. Loop through each character of the string s.
  2. If the character is '('increase balance by 1.
  3. If the character is ')'decrease balance by 1:
    • If balance becomes negative, it means there are more closing brackets than opening brackets. We need to add an opening bracket to balance it, so increase additions with 1 and reset balance to 0.
  4. At the end of the loop, if balance is greater than 0, it indicates that there are unmatched opening parentheses, so add balance Unpleasant additions.

Let’s implement this solution in PHP: 921. Minimum addition to make parentheses valid


/**
 * @param String $s
 * @return Integer
 */
function minAddToMakeValid($s) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

// Example usage:
$s1 = "())";
echo minAddToMakeValid($s1);  // Output: 1

$s2 = "(((";
echo minAddToMakeValid($s2);  // Output: 3
?>
Go to full screen mode

Exit full screen mode

Explanation:

  • For the string s = "())":
    • balance becomes negative when the second ')' is found, so additions is increased.
    • At the end, balance is 0, and additions is 1, so we need 1 addition to make the string valid.
  • For the string s = "(((":
    • balance becomes 3 because there are 3 unmatched '(' at the end.
    • The result is additions + balancethat is 0 + 3 = 3.

This solution has a time complexity of On) Where N is the length of the string, and a space complexity of O(1) because we only use a few variables.

Contact links

If you found this series helpful, please consider reading the warehouse star it on GitHub or share the post on your favorite social networks 😍. Your support would mean a lot to me!

If you want more helpful content like this, you can follow me: