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

Pythonの3つの条件を満たすように最小文字を変更するプログラム


小文字のみの2つの文字列sとtがあるとします。 1つの操作で、sまたはtの任意の文字を任意の小文字に変更できます。次の3つの条件のいずれかを満たす必要があります-

  • sのすべての文字は、アルファベットのtのすべての文字よりも厳密に小さくなっています。

  • tのすべての文字は、アルファベットのsのすべての文字よりも厳密に小さくなっています。

  • sとtはどちらも1つの異なる文字のみで構成されています。

結果を得るのに必要な最小限の操作数を見つける必要があります。

したがって、入力がs ="sts"、t ="uss"の場合、出力は2になります。

  • 2回の操作でtを「uuu」に変更すると、sのすべての文字はtのすべての文字よりも小さくなります。

  • 3回の操作でsを「ttt」に、tを「sss」に変更すると、tのすべての文字はsのすべての文字よりも小さくなります。

  • 2つの操作でsを「sss」に、tを「sss」に変更すると、sとtは1つの異なる文字で構成されます。

ここでは、2つの操作(1つまたは3つ)で最善の方法が実行されました。

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

  • counter_s:=sの各文字の頻度を保持するためのマップ
  • counter_t:=各文字の頻度をtに保持するためのマップ
  • less_s:=無限大、less_t:=無限大、一意:=無限大
  • accu_s:=0、accu_t:=0
  • 英語の小文字のcごとに、
    • unique:=一意の最小値および(sのサイズ+tのサイズ-counter_s[c]-counter_t [c])
      • counter_t [c])
    • cのASCIIが'a'のASCIIよりも大きい場合、
      • less_a:=最小のless_sおよび(sのサイズ-accu_s + accu_t)
      • less_b:=最小のless_tおよび(tのサイズ-accu_t + accu_s)
    • accu_s:=accu_s + counter_s [c]
    • accu_t:=accu_t + counter_t [c]
  • 最小のless_s、less_t、uniqueを返す

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

from collections import Counter
import string
def solve(s, t):
   counter_s = Counter(s)
   counter_t = Counter(t)
   less_s, less_t, unique = float('inf'), float('inf'), float('inf')
   accu_s, accu_t = 0, 0
   for c in string.ascii_lowercase:
      unique = min(unique, len(s) + len(t) - counter_s[c] - counter_t[c])
      if c > 'a':
         less_a = min(less_s, len(s) - accu_s + accu_t)
         less_b = min(less_t, len(t) - accu_t + accu_s)
      accu_s += counter_s[c]
      accu_t += counter_t[c]
   return min(less_s, less_t, unique)

s = "sts"
t = "uss"
print(solve(s, t))

入力

"sts", "uss"

出力

2

  1. コイン交換のためのPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 − N枚のコインが与えられ、Sに各値が無限に供給されるように、それらのコインを変更したいと考えています。順序に関係なく、変更できる方法がいくつあるかを表示する必要があります。 動的計画法の概念を使用して問題ステートメントを解決し、時間の複雑さを軽減します。 次に、以下の実装のソリューションを見てみましょう- 例 # dynamic approach def count(S, m, n):    # base case    table = [[0 for x in

  2. 配列を1つずつ循環的に回転させるPythonプログラム

    与えられたユーザー入力配列。私たちのタスクは、周期的に回転することは、値を時計回りに回転させることを意味します。 例 Input: A=[1,2,3,4,5] Output=[5,1,2,3,4] アルゴリズム Step 1: input array element. Step 2: Store the last element in a variable say x. Step 3: Shift all elements one position ahead. Step 4: Replace first element of array with x. サンプルコード # Pyth