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

Pythonを使用して括弧文字列のバランスを取るための最小挿入を見つけるプログラム


開き括弧と閉じ括弧'('および')'を持つ文字列sがあるとします。 −

の場合、括弧文字列はバランスが取れていると言えます。
  • 左括弧'('には対応する2つの連続した右括弧'))'があります。

  • 左括弧'('は、対応する2つの連続する右括弧'))'の前に配置する必要があります。

したがって、たとえば、「())」、「())(())))」はバランスが取れていますが、「)()」、「()))」はバランスが取れていません。そのような文字列がある場合、文字列のバランスをとるために括弧の数(開くまたは閉じる)を数える必要があります。

したがって、入力がs ="(())))))"のようである場合、出力は1になります。これを分割すると、 "(())))))"を取得できるため、次のようになります。文字列"(())())))"を作成してバランスをとるために、左括弧を1つ使用します。

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

  • :=0、n:=sのサイズ

  • ret:=0、i:=0

  • i

    • s[i]が'('と同じ場合、

  • :=o + 1

    • それ以外の場合

      • i +1

        • oが0の場合、

          • ret:=ret + 1

        • それ以外の場合

  • :=o-1

    • i:=i + 1

    • それ以外の場合

      • ret:=ret + 1

      • oが0の場合、

        • ret:=ret + 1

      • それ以外の場合

  • :=o-1

    • i:=i + 1

  • return 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

  1. Pythonを使用してすべてのノードに到達するための頂点の最小数を見つけるプログラム

    n個の頂点とノードに0からn-1までの番号が付けられた有向非巡回グラフがあるとします。グラフはエッジリストで表されます。ここで、edges [i] =(u、v)はノードuからノードv。グラフ内のすべてのノードに到達できる頂点の最小セットを見つける必要があります。 (頂点は任意の順序で返すことができます)。 したがって、入力が次のような場合 これらの2つの頂点は他のどの頂点からも到達できないため、出力は[0,2,3]になります。したがって、それらから開始すると、すべてをカバーできます。 これを解決するには、次の手順に従います- n:=エッジのサイズ all_nodes:=

  2. Pythonを使用してバイナリグリッドを配置するための最小スワップを見つけるプログラム

    nxnのバイナリ行列があるとします。 1つのステップで、隣接する2つの行を選択し、それらを入れ替えるような操作を実行できます。行列の主対角線より上のすべてのノードが0になるように、必要な最小スワップの数をカウントする必要があります。そのような解決策がない場合は、-1を返します。 したがって、入力が次のような場合 0 1 0 0 1 1 1 0 0 -であるため、出力は2になります。 これを解決するには、次の手順に従います。 n:=行列の行数 m:=サイズnの配列を作成し、nで埋めます 0からn-1の範囲のiの