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

Pythonで変更した後に最大のバイナリ文字列を見つけるプログラム


バイナリ文字列があるとします。次の各操作は何度でも適用できます-

  • 番号に部分文字列「00」が含まれている場合は、「10」に置き換えることができます。

  • 番号に部分文字列「10」が含まれている場合は、「01」に置き換えることができます。

次に、任意の数の操作の後に取得できる最大のバイナリ(数値に基づく)文字列を見つける必要があります。

したがって、入力がs ="001100"の場合、出力は111011になります。これは、(00)1100-> 101(10)0-> 1010(10)-> 10(10)01-のように転送できるためです。> 100(10)1-> 1(00)011->111011。

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

  • 長さ:=sのサイズ
  • ゼロ:=sの0の数
  • ゼロが2未満の場合、
    • return s
  • s:=sの左側からすべての「1」を削除します
  • Leading_ones:=長さ-sのサイズ
  • Leading_ones:=Leading_ones+ゼロ-1
  • trailing_ones:=length --leading_ones-1
  • answer_left:=leading_onesの1の数
  • answer_right:=1trailing_onesの1の数
  • answer_left concatenate 0 concatenate answer_right and return

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

def solve(s):
   length = len(s)
   zeros = s.count('0')
   if zeros < 2:
      return s
   s = s.lstrip('1')
   leading_ones = length - len(s)
   leading_ones += zeros - 1
   trailing_ones = length - leading_ones - 1
   answer_left = '1' * leading_ones
   answer_right = '1' * trailing_ones
   return ''.join([answer_left, '0', answer_right])

s = "001100"
print(solve(s))

入力

"001100"

出力

111011

  1. Pythonで最大の建物の高さを見つけるプログラム

    値nと、制限と呼ばれるペアの別のリストがあるとします。都市にn棟の新しい建物を建てたいと思っています。ただし、制限はほとんどありません。私たちは一列に建てることができ、建物には1からnまでのラベルが付けられています。制限には2つのパラメーターがあるため、restrictions [i] =(id_i、max_height_i)は、id_iの高さがmax_height_i以下でなければならないことを示します。新しい建物の高さに関する市の制限は次のとおりです- 各建物の高さは0または正の値である必要があります。 最初の建物の高さは0でなければなりません。 隣接する2つの建物の高さ

  2. Pythonで二分木の最大幅を見つけるプログラム

    二分木があるとすると、ツリー内の任意のレベルの最大幅を見つける必要があります。ここで、レベルの幅は、左端のノードと右端のノードの間に保持できるノードの数です。 したがって、入力がのような場合 その場合、出力は2になります これを解決するために、次の手順に従います- マップdを作成し、最小値と最大値を保持するには、最小値は最初は無限大で、最大値は0です 関数dfs()を定義します。これはルートを取ります、pos:=0、depth:=0 ルートがnullの場合、戻り値はありません d [depth、0] =d [depth、0]とposの最小値 d [d