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

Pythonで回文にするために追加する文字の最小数を見つけるプログラム


文字列sがあるとすると、sの後に挿入する文字の最小数を見つけて、回文にする必要があります。

したがって、入力がs ="mad"の場合、出力は2になります。これは、"am"を追加して"madam"にすることができるためです。

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

  • b:=256、m:=10 ^ 9 + 7

  • s:=sの各iについて(iのASCII)−97の差をとったリスト

  • r:=sの最後の要素、l:=sの最後の要素

  • n:=sのサイズ

  • res:=n − 1

  • p:=b

  • n − 2から0の範囲のiの場合、1ずつ減らします。

    • r:=r + s [i] * p、r:=r mod m

    • l:=l * b、l:=l + s [i]

    • l:=l mod m

    • p:=p * b、p:=p mod m

    • lがrと同じ場合、

      • res:=i

  • 解像度を返す

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

class Solution:
   def solve(self, s):
      b = 256
      m = 10 ** 9 + 7
      s = list(ord(i) − 97 for i in s)
      r = l = s[−1]
      n = len(s)
      res = n − 1
      p = b
      for i in range(n − 2, −1, −1):
         r += s[i] * p
         r %= m
         l *= b
         l += s[i]
         l %= m
         p *= b
         p %= m
         if l == r:
            res = i
      return res
ob = Solution()
s = "mad"
print(ob.solve(s))

入力

"mad"

出力

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