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

Pythonで各ブラケットの深さの文字数をカウントするプログラム


「X」、「(」、および「)」の3文字のみで構成される文字列sがあるとします。文字列にはバランスの取れた角かっこがあり、いくつかの「X」の間に入れ子になった角かっこが再帰的に存在する可能性があります。ブラケットの各深さで、最も浅い深さから最も深い深さまで、「X」の数を見つける必要があります。

したがって、入力がs ="(XXX(X(XX))XX)"のような場合、出力は[5、1、2]

になります。

Pythonで各ブラケットの深さの文字数をカウントするプログラム

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

  • 深さ:=-1
  • out:=新しいリスト
  • sの各cについて、
    • cが"("と同じ場合、
      • 深さ:=深さ+ 1
    • それ以外の場合、cが ")"と同じ場合、
      • 深度:=深度-1
    • 深さがoutのサイズと同じ場合、
      • 出力の最後に0を挿入
    • cが「X」と同じ場合、
      • out [depth]:=out [depth] + 1
  • 戻る

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

def solve(s):
   depth = -1
   out = []

   for c in s:
      if c == "(":
         depth += 1
      elif c == ")":
         depth -= 1

      if depth == len(out):
         out.append(0)

      if c == "X":
         out[depth] += 1
   return out

s = "(XXX(X(XX))XX)"
print(solve(s))

入力

"(XXX(X(XX))XX)"

出力

[5, 1, 2]

  1. Pythonのsの個別の部分文字列の数をカウントするプログラム

    文字列sがあるとすると、sの個別の空でない部分文字列の数を見つける必要があります。 したがって、入力がs =abaaの場合、サブストリングは[a、 b、 ab、 ba、 aa、 aba、 であるため、出力は8になります。 baa 、abaa]。 これを解決するには、次の手順に従います- トライ:=新しい地図 n:=sのサイズ 0からn-1の範囲のiの場合、do curr:=trie iからn-1の範囲のjの場合、do c:=s [j] cがcurrにない場合は、 curr [c]:=新しいマップ curr:=curr [c] curr [*]:=True

  2. PythonでnノードのBSTの数をカウントするプログラム

    n個の異なるノードがあるとします。すべてが異なります。二分探索木を形成するためにそれらを配置できる方法の数を見つける必要があります。二分探索木で知っているように、左側のサブツリーは常に小さい値を保持し、右側のサブツリーは大きい値を保持します。 これを解決するために、カタラン数を見つけます。カタラン数C(n)は、n個の異なるキーを持つ二分探索木を表します。式は次のようになります $$ C(n)=\ frac {(2n)!} {(n + 1)!\ times n!} $$ したがって、入力がn =3の場合、出力は5になります。 これを解決するには、次の手順に従います- 関数ncr