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

Pythonで交互の値を持つために必要なフリップの最小数を見つけるためのプログラム


バイナリ文字列sがあるとします。ここで、sの接頭辞を取り、それを後ろに移動できると仮定します。次に、同じ値の連続する文字がないように、反転する必要のある文字の最小数を見つけます。

したがって、入力がs ="10010101111"の場合、プレフィックス "10"を取得できるため、出力は2になります。次に、文字列が "01010111110"になるように後ろに移動し、3番目と5番目のビットを右から0に反転します。 ("01010101010")。

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

  • ans:=Sのサイズ

  • N:=Sのサイズ

  • s:=0

  • 0から2*Nの範囲のiの場合、実行

    • s:=s +(S [i mod N] XOR(i AND 1))の整数

    • i> =N-1の場合、

      • ans:=ans、s、Nの最小値-s

      • s:=s-(S [(i-(N-1))mod N])XOR((i-(N-1))AND 1)

        の整数
  • ansを返す

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

class Solution:
   def solve(self, S):
      ans = N = len(S)
      s = 0
      for i in range(2 * N):
         s += int(S[i % N]) ^ (i & 1)
         if i >= N - 1:
            ans = min(ans, s, N - s)
            s -= int(S[(i - (N - 1)) % N]) ^ ((i - (N - 1)) & 1)
      return ans
ob = Solution()
s = "10010101111"
print(ob.solve(s))

入力

"10010101111"

出力

2

  1. Pythonでマージした後も、最小数の色を見つけるプログラムが残っています

    色のリスト(R、G、B)があるとします。これで、2つの異なる色が隣り合っている場合、それらは3番目の色の単一の色のアイテムに変換できます。そのような変換の可能なシーケンスの後に残っているそれらの最小数を見つける必要があります。 したがって、入力がcolors =[G、 R、 G、 B、 R]の場合、以下のように変換できるため、出力は1になります- これを解決するには、次の手順に従います- n:=色のサイズ 色に異なる色が1つしかない場合は、 return n n <=1の場合、 return n x:=0 d:=キーと値のペアを持つマップ{( R、1)、(

  2. Pythonで1つの文字列を他の文字列のサブ文字列にするために必要な最小数の操作を見つけるプログラム

    2つの文字列sとtがあるとすると、sがtをsの部分文字列にするために必要な操作の最小量を見つける必要があります。これで、各操作で、s内の任意の位置を選択し、その位置の文字を他の任意の文字に変更できます。 したがって、入力がs =abbpqr、t =bbxyの場合、サブストリング bbpqを取得して、pをxに、qをに変更できるため、出力は2になります。 y。 これを解決するには、次の手順に従います- k:=tのサイズ、n:=sのサイズ ans:=10 ^ 10 0からn-kの範囲のiの場合、do ss:=s[インデックスiからi+k-1へ]の部分文字列 ans:=最小のans