使用 Python 查找最小插入以平衡括号字符串的程序

假设我们有一个带有左括号和右括号 '(' 和 ')' 的字符串 s。我们可以说括号字符串在以下情况下是平衡的 -

  • 任何左括号'('都有一个对应的两个连续的右括号'))'。

  • 左括号 '(' 必须放在相应的两个连续右括号 '))' 之前。

例如,“())”、“())(()))”是平衡的,但“)()”、“()))”不是。如果我们有这样的字符串,我们必须计算括号(开头或结尾)的数量以使字符串平衡。

所以,如果输入像 s = "(())))))",那么输出将是 1,因为如果我们把它分开,我们可以得到 "(()) ))))",所以我们需要一个左括号使字符串 "( ()) ()) ))" 使其平衡。

为了解决这个问题,我们将按照以下步骤操作 -

  • := 0, n := s 的大小

  • 返回:= 0,我:= 0

  • 当 i < n 时,做

    • 如果 s[i] 与 '(' 相同,则

  • := o + 1

    • 如果 i + 1 < n 且 s[i + 1] 与 ')' 相同,则

    • ret := ret + 1

    • 如果 o 是 0,那么

    • 否则,

    • 否则,

    • := o - 1

      • ret := ret + 1

      • 如果 o 是 0,那么

      • 否则,

      • ret := ret + 1

      • 我 := 我 + 1

      • 否则,

      • := o - 1

        • 我 := 我 + 1

      • 返回 ret + 2 * o

      让我们看看以下实现以获得更好的理解 -

      示例

      def solve(s):

         o = 0

         n = len(s)

         ret = 0

         i = 0

         while i < n:

            if s[i] == '(':

               o += 1

            else:

               if i + 1 < n and s[i + 1] == ')':

                  if not o:

                     ret += 1

                  else:

                     o -= 1

                     i += 1

               else:

                  ret += 1

                  if not o:

                     ret += 1

                  else:

                     o -= 1

            i += 1

         return ret + 2 * o

      s = "(())))))"

      print(solve(s))

      输入

      "(())))))"
      输出结果
      3

      以上是 使用 Python 查找最小插入以平衡括号字符串的程序 的全部内容, 来源链接: utcz.com/z/353592.html

      回到顶部