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

Pythonで同様の端を削除した後に文字列の最小長を見つけるプログラム


'a'、'b'、および'c'の3文字のみの文字列sがあるとします。次のアルゴリズムを文字列に何度でも適用します-

  • プレフィックス内のすべての文字が同じであるsから空でないプレフィックスを選択します。

  • 接尾辞のすべての文字が同じであるsから空でない接尾辞を選択します。

  • 接頭辞と接尾辞は互いに素です。

  • プレフィックスとサフィックスの文字は同じである必要があります。

  • プレフィックスとサフィックスの両方をsから削除します。

最後に、上記の操作を何度でも(場合によってはゼロ回)実行した後、sの最小長を見つける必要があります。

したがって、入力がs ="aabccabba"の場合、最初はプレフィックス="aa"とサフィックス="a"を選択できるため、出力は3になり、削除後の文字列は"bccabb"になります。プレフィックス="b"とサフィックス"bb"を選択すると、削除後の文字列は "cca"になり、長さは3になります。

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

  • s:=s

    でキューを作成します
  • s>1のサイズでs[0]がsの最後の要素である場合、実行

    • chk:=s [0]

    • sとs[0]は同じですが、実行してください

      • sから左の要素を削除します

    • sは空ではなく、sの最後の要素はchkと同じですが、実行してください

      • sから最後の要素を削除する

  • sの戻りサイズ

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

from collections import deque
def solve(s):
   s = deque(s)
   while len(s) > 1 and s[0] == s[-1]:
      chk = s[0]
      while s and s[0] == chk:
         s.popleft()
      while s and s[-1] == chk:
         s.pop()
   return len(s)

s = "aabccabba"
print(solve(s))

入力

"aabccabba"

出力

3

  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で不可逆ランレングスエンコーディングの最小長を見つけるプログラム

    小文字の文字列sと別の値kがあるとします。ここで、繰り返される連続する文字をカウントおよび文字として配置することにより、文字列に対してランレングスエンコーディングを実行する操作について考えてみます。したがって、文字列が「aaabbc」のような場合、「3a2bc」としてエンコードされます。ここでは、「c」の代わりに「1c」を付けません。これは、連続して1回しか表示されないためです。したがって、最初にs内のk連続文字を削除してから、結果のrun-lengthencodingの可能な最小の長さを見つけることができます。 したがって、入力がs =xxxxxyyxxxxxzzxxx、k =2の場合、2