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

Pythonで最も長く減少するワードチェーンの長さを見つけるプログラム?


有効な単語のリストがあり、文字列sもあるとすると、sから始めて単一文字を削除することで生成できる、減少する単語の最長チェーンの長さを見つけて、有効な単語を作成する必要があります。

したがって、入力がwords =["lii"、 "limit"、 "limi"、 "li"、 "coffee"、 "jug"、 "pool"、 "type"] s ="limit"の場合、 「limit」、「limit」->「limi」->「lii」->「li」という単語からチェーンを作成できるため、出力は4になります。

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

  • 関数solve()を定義します。これには言葉が必要です、s

  • max_num:=0

  • 言葉で言うと、iごとに

    • iがsと同じ場合、

      • 0からsのサイズの範囲のjについては、次のようにします

        • max_num:=最大1 + solution(words、s [from index 0 to j-1] concatenate s [from index j + 1 to end])and max_num

  • max_numを返す


class Solution:
   def solve(self, words, s):
      max_num = 0
      for i in words:
         if i == s:
            for j in range(len(s)):
               max_num = max(1 + self.solve(words, s[:j] + s[j + 1 :]), max_num)
      return max_num

ob = Solution()
words = ["lii", "limit", "limi", "li", "coffee", "jug", "pool", "type"]
s = "limit"
print(ob.solve(words, s))

入力

["lii", "limit", "limi", "li", "coffee", "jug", "pool", "type"],"limit"

出力

4

  1. Pythonで連続して増加する最長の部分文字列の長さを見つけるプログラム

    小文字の文字列sがあるとします。これには、英語の文字と「?」が含まれますシンボル。 「?」ごとに削除するか、小文字に置き換える必要があります。文字「a」で始まる、連続して増加する最長の部分文字列の長さを見つける必要があります。 したがって、入力がs =vta ??? defkeの場合、出力は6になります。これは、sを vtabcdefkeに変換でき、 abcdefは、連続して増加する最長の部分文字列であり、これも次のように始まります。 「a」。 これを解決するには、次の手順に従います- maxlen:=0 長さ:=0 qmarks:=0 sの各cについて、 cが「?」と同じ

  2. Pythonのn-aryツリーで最長のパスの長さを見つけるプログラム

    各アイテムが保持しているエッジリスト(u、v)があり、uがvの親であることを表しているとします。ツリー内で最も長いパスの長さを見つける必要があります。パスの長さは、1+そのパス内のノードの数です。 したがって、入力が次のような場合 パスが[1、4、5、7]であり、合計4つのノードがあるため、出力は5になります。したがって、パスの長さは1 + 4=5です。 これを解決するには、次の手順に従います- g:=指定されたエッジリストからのグラフの隣接リスト d:=新しい地図 関数bfs()を定義します。これには時間がかかります d [o]:=1 f:=o q:=[o]