>  기사  >  백엔드 개발  >  . 괄호를 유효하게 만들기 위한 최소 추가

. 괄호를 유효하게 만들기 위한 최소 추가

Barbara Streisand
Barbara Streisand원래의
2024-10-10 06:09:02725검색

. Minimum Add to Make Parentheses Valid

921. Minimum Add to Make Parentheses Valid

Difficulty: Medium

Topics: String, Stack, Greedy

A parentheses string is valid if and only if:

  • It is 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 are given a parentheses string s. In one move, you can insert a parenthesis at any position of the string.

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

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

Example 1:

  • Input: s = "())"
  • Output: 1

Example 2:

  • Input: s = "((("
  • Output: 3

Constraints:

  • 1 <= s.length <= 1000
  • s[i] is either '(' or ')'.

Solution:

We need to determine how many opening or closing parentheses need to be added to make the input string s valid. A valid string means that every 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 parentheses.
  • We use another variable additions to count the minimum number of parentheses required.

Approach:

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

Let's implement this solution in PHP: 921. Minimum Add to Make Parentheses Valid






Explanation:

  • For the string s = "())":
    • balance becomes negative when the second ')' is encountered, so additions is incremented.
    • 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 + balance, which is 0 + 3 = 3.

This solution has a time complexity of O(n) where n is the length of the string, and a space complexity of O(1) since we only use a few variables.

Contact Links

If you found this series helpful, please consider giving the repository a star on GitHub or sharing the post on your favorite social networks ?. Your support would mean a lot to me!

If you want more helpful content like this, feel free to follow me:

  • LinkedIn
  • GitHub

위 내용은 . 괄호를 유효하게 만들기 위한 최소 추가의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.