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

Pythonで特定の文字列を構築するための最小コストを決定するプログラム


長さnの文字列'str'を作成する必要があるとします。文字列を作成するために、2つの操作を実行できます。

  • コストaでstrの最後に文字を追加できます。
  • コストrのstrの最後に部分文字列sub_strを追加できます。

文字列strを構築するための最小コストを計算する必要があります。

したがって、入力がa =5、r =4、str ='tpoint'のような場合、出力は29になります。

文字列'tpoint'を作成するためのコストは、以下のとおりです-

str = 't'; a new character added, therefore the cost is 5.
str = 'tp'; a new character added, therefore the cost is 5.
str = 'tpo'; a new character added, therefore the cost is 5.
str = 'tpoi'; a new character added, therefore the cost is 5.
str = 'tpoin'; a new character added, therefore the cost is 5.
str = 'tpoint'; substring 't' is added, therefore the cost is 4.

総費用は5+5 + 5 + 5 + 5 + 4=29です。

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

  • size:=strのサイズ
  • 最大:=新しいリスト
  • 低:=0
  • 範囲1からサイズ+1のuppの場合は、
    • str[インデックスlowからインデックスupp]がstr[インデックス0からインデックスlow]に存在しない場合、do
      • 低:=低+ 1
    • 最大の最後に挿入(upp-low)
  • c:=を含む新しいリスト
  • 1からサイズの範囲のiの場合は、
    • maximum [i]が0と同じ場合、
      • cの最後に(c + aの最後の要素)を挿入します
    • それ以外の場合、
      • cの最後に(c + aの最後の要素)、(c[i-最大[i]]+ r)の最小値を挿入します
  • cの最後の要素を返す

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

def solve(a, r, str):
   size = len(str)
   largest = []
   low = 0
   for upp in range(1, size+1):
      while str[low:upp] not in str[:low]:
         low += 1
      largest.append(upp - low)

   c = [a]
   for i in range(1, size):
      if largest[i] == 0:
         c.append(c[-1] + a)
      else:
         c.append(min(c[-1] + a, c[i - largest[i]] + r))

   return c[-1]

print(solve(5, 4, 'tpoint'))

入力

5, 4, 'tpoint'

出力

29

  1. 指定された文字列が母音回文であるかどうかを確認するPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −文字列(母音と子音の両方の文字を含む)が与えられ、すべての子音を削除してから、結果の文字列が回文であるかどうかを確認します。 ここでは、最初に文字列に存在するすべての子音を削除します。各値を1から計算された最小値まで除算することによって計算されて除数を計算するループ 条件が真であると評価されるたびに、カウンターは1ずつ増加します。 文字列内のすべての子音を削除します。ここで、母音の文字列が回文であるかどうか、つまり、指定された文字列とその反転が同一であるかどうかを確認します。それがpalindromep

  2. 指定された文字列がパングラムであるかどうかを確認するPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 文字列入力が与えられた場合、その文字列がパングラムであるかどうかを確認するPythonプログラムを生成する必要があります。 パングラムは、英語のアルファベットコレクションのすべての文字を含む文/一連の単語です。 では、問題を解決する方法を見てみましょう 入力文字列に存在する各文字が、手動で宣言するアルファベットセットに属しているかどうかをチェックするループを使用します。 上記のアプローチの実装は、-によって与えられます。 例 import string def ispangram