Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの式O(1)スペースO(N ^ 2)時間計算量でバランスの取れた括弧を確認します


これらの角かっこ'('、')'、'{'、'}'、'['および']'を含む文字列strがあるとすると、角かっこがバランスしているかどうかを確認する必要があります。開閉ブラケットのタイプが同じタイプの場合、ブラケットはバランスが取れていると言えます。ブラケットは正しい順序で閉じられます。

したがって、入力が{([])}のような場合、出力はTrueになります。

これを解決するには、次の手順に従います-

  • cnt:=0
  • i:=0
  • j:=-1
  • 関数solve()を定義します。これにはs、tempがかかります
  • cnt:=cnt-1
  • s:=sからの新しいリスト
  • j>-1でs[j]がtempと同じ場合、
    • s [i]:='#'
    • s [j]:='#'
    • j> =0でs[j]は'#'と同じですが、do
      • j:=j-1
    • i:=i + 1>
    • 1を返す
  • それ以外の場合、
    • 0を返す
  • メインの方法から、次の手順を実行します-
  • sのサイズが0と同じ場合、
    • Trueを返す
  • それ以外の場合、
    • ans:=False
    • i
    • s[i]が'}'と同じ場合、
      • ans:=resolve(s、'{')
      • ansが0と同じ場合、
        • Falseを返す
      • それ以外の場合、s[i]が')'と同じ場合、
        • ans:=resolve(s、'(')
        • ansが0と同じ場合、
          • Falseを返す
      • それ以外の場合、s[i]が']'と同じ場合、
        • ans:=resolve(s、'[')
        • ansが0と同じ場合、
          • Falseを返す
      • それ以外の場合、
        • j:=i
        • i:=i + 1
        • cnt:=cnt + 1
  • cntが0と同じでない場合、
    • Falseを返す
  • Trueを返す

理解を深めるために、次の実装を見てみましょう-

cnt = 0
i = 0
j = -1
def solve(s, temp):
   global i, j, cnt
   cnt -= 1
   s = list(s)
   if j > -1 and s[j] == temp:
      s[i] = '#'
      s[j] = '#'
      while j >= 0 and s[j] == '#':
         j -= 1
      i += 1
      return 1
   else:
      return 0
def bracketOrderCheck(s):
   global i, j, cnt
   if len(s) == 0:
      return True
   else:
      ans = False
      while i < len(s):
         if s[i] == '}':
            ans = solve(s, '{')
            if ans == 0:
               return False
         elif s[i] == ')':
            ans = solve(s, '(')
            if ans == 0:
               return False
         elif s[i] == ']':
            ans = solve(s, '[')
            if ans == 0:
               return False
         else:
            j = i
            i += 1
            cnt += 1
      if cnt != 0:
         return False
      return True
print(bracketOrderCheck("{([])}"))

入力

"{(()[])}"

出力

True

  1. 除数の数が偶数か奇数かをチェックするPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 −数値「n」を指定して、除数の総数が偶数または奇数であることを確認します。 このアプローチでは、すべての除数を見つけて、除数の数が偶数または奇数であることを確認します。 実装は以下のとおりです- 例 import math def countDivisors(n) :    count = 0    # calculating all the divisors    root=int(math.sqrt(n))+2 &nbs

  2. 与えられた数がフィボナッチ数であるかどうかをチェックする方法のためのPythonプログラム?

    この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 数nが与えられたら、nがフィボナッチ数であるかどうかを確認します n番目のフィボナッチ数は前の2つのフィボナッチ数の合計であることは誰もが知っています。しかし、それらは漸化式以外の興味深い関係も提供します。 (5 * n2 + 4)または(5 * n2 – 4)が完全な正方形である場合に限り、数値は本質的にフィボナッチです。 このプロパティを使用して、数値がフィボナッチであるかどうかを確認します。 では、Pythonスクリプトの実装を見てみましょう- 例 import math # if x is p