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

Pythonで特定のアナグラムを作成するために必要な最小限のスワップを見つけるプログラム


2つの文字列SとTがあり、それらが互いにアナグラムであるとします。 Tと同じにするために、Sで必要なスワップの最小数を見つける必要があります。

したがって、入力がS ="kolkata" T ="katloka"の場合、出力は3になり、このシーケンスでスワップできます[katloka(指定)、kotlaka、koltaka、kolkata]。

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

  • 関数util()を定義します。これにはS、T、iが必要です
  • i> =Sのサイズの場合、
    • 0を返す
  • S[i]がT[i]と同じ場合、
    • return util(S、T、i + 1)
  • x:=T [i]
  • ret:=99999
  • i + 1からTのサイズまでの範囲のjについては、
    • xがS[j]と同じ場合、
      • S[i]とS[j]を入れ替える
      • ret:=最小のretおよび(1 + util(S、T、i + 1))
      • S[i]とS[j]を入れ替える
  • return ret
  • メインの方法から次の手順を実行します。
  • return util(S、T、0)

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

class Solution:
   def util(self, S, T, i) :
      S = list(S)
      T = list(T)
      if i >= len(S):
         return 0
      if S[i] == T[i]:
         return self.util(S, T, i + 1)
      x = T[i]
      ret = 99999;
      for j in range(i + 1, len(T)):
         if x == S[j]:
            S[i], S[j] = S[j], S[i]
            ret = min(ret, 1 + self.util(S, T, i + 1))
            S[i], S[j] = S[j], S[i]
      return ret
     
   def solve(self, S, T):
      return self.util(S, T, 0)

ob = Solution()
S = "kolkata"
T = "katloka"
print(ob.solve(S, T))

入力

"kolkata", "katloka"

出力

3

  1. Pythonを使用してバイナリグリッドを配置するための最小スワップを見つけるプログラム

    nxnのバイナリ行列があるとします。 1つのステップで、隣接する2つの行を選択し、それらを入れ替えるような操作を実行できます。行列の主対角線より上のすべてのノードが0になるように、必要な最小スワップの数をカウントする必要があります。そのような解決策がない場合は、-1を返します。 したがって、入力が次のような場合 0 1 0 0 1 1 1 0 0 -であるため、出力は2になります。 これを解決するには、次の手順に従います。 n:=行列の行数 m:=サイズnの配列を作成し、nで埋めます 0からn-1の範囲のiの

  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