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

Pythonで指定された文字から形成できる最長の単語の長さを見つけるプログラム


単語のリストと文字と呼ばれる文字列があるとすると、指定された文字を並べ替えることで作成できる最長の単語のサイズを見つける必要があります。文字にはアスタリスク文字(*)が含まれている場合があり、任意の文字と一致する可能性があります。また、すべての文字を使用する必要はありません。

したがって、入力がwords =["prince"、 "rice"、 "price"、 "limit"、 "hello"] Letters ="* r ** ce *"の場合、出力は6になります。私たちが作ることができる最長の単語は「王子」です。長さは6です。

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

  • has:=文字と文字の各要素の頻度を含むマップ
  • 関数valid()を定義します。これには時間がかかります
  • need:=sの各要素の文字と頻度を含むマップ
  • extra:=のすべての要素の合計(最大0およびneed [char]-必要なすべてのcharに対してhas[char])
  • 余分な<=has["*"]
  • の場合はtrueを返します
  • メインの方法から次の手順を実行します。
  • リスト内のすべての要素の最大値を返します[単語が有効な場合の単語内のすべての単語の単語のサイズ]

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

from collections import Counter

class Solution:
   def solve(self, words, letters):
      has = Counter(letters)

      def valid(s):
         need = Counter(s)
         extra = sum([max(0, need[char] - has[char]) for char in need])
         return extra <= has["*"]

      return max([len(word) for word in words if valid(word)])

ob = Solution()
words = ["prince", "rice", "price", "limit", "hello"]
letters = "*r**ce*"
print(ob.solve(words, letters))

入力

["prince", "rice", "price", "limit", "hello"], "*r**ce*"

出力

6

  1. Pythonで最長のパリンドローム部分文字列の長さを見つけるプログラム

    文字列Sがあるとします。Sで最長の回文部分文字列の長さを見つける必要があります。文字列Sの長さは1000であると想定しています。したがって、文字列が「BABAC」の場合、最長の回文部分文字列は「BAB」です。長さは3です。 これを解決するには、次の手順に従います- 文字列の長さと同じ次数の正方行列を1つ定義し、Falseで埋めます 主対角要素をtrueに設定し、DP [i、i] =0からorder–1までのすべてのiに対してTrue start:=0 範囲2からS+1の長さのlの場合 0からSの長さまでの範囲のiの場合– l + 1 終了:=i + l

  2. Pythonで指定された文字を使用して作成できる最長の長さを見つけるプログラム

    単語と呼ばれる文字列と文字と呼ばれる別の文字列のリストがあるとすると、文字の文字から形成できる単語の最長の文字列の長さを見つける必要があります。単語を形成できない場合は、0を返します。ここでは文字を再利用できません。 したがって、入力がwords =[dog、 cat、 rat、 bunny、 lion、 bat]、letters =gabctnyuの場合、出力は3になります。 「猫」または「バット」という単語を作成できるため、最大長は3です。 これを解決するには、次の手順に従います- ref:=文字とその頻度を含む地図 max:=0 単語内の各単語について、 w:=単語の文字と