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

単語の連結の数を数えるプログラムは、Pythonのリストにあります


文字列のリストがあるとします。リスト内で他の単語を連結した単語の数を見つける必要があります。連結時に単語を再利用したり、何度でも連結したりできます。

したがって、入力がwords =["hello"、 "world"、 "helloworld"、 "famous"、 "worldfamous"、 "programming"]の場合、"helloworld"は"の連結であるため、出力は2になります。こんにちは」と「世界」。 「worldfamous」は「world」と「famous」を連結したものです。

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

  • トライ:=新しい地図
  • 単語内の各単語について、
    • layer:=trie
    • 単語のwごとに、
      • wがレイヤーにない場合は、
        • layer [w]:=新しいマップ
      • layer:=layer [w]
    • layer ["*"]:=空のタプル
    • 関数dfs()を定義します。これには、num_concatenated_wordsという単語が必要です
    • layer:=trie
    • 単語内の各インデックスiと単語wについて、実行します
      • 「*」がレイヤーにある場合、
        • dfs(word [インデックスiから終了まで]、num_concatenated_words + 1)がTrueの場合、
          • Trueを返す
        • wがレイヤーにない場合は、
          • Falseを返す
      • layer:=layer [w]
    • 「*」がレイヤーにあり、num_concatenated_words> =1の場合、
      • Trueを返す
    • Falseを返す
    • メインの方法から、次の手順を実行します。
    • count:=0
    • 単語内の各単語について、
      • count:=count + dfs(word、0)
  • 返品数

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

class Solution:
   def solve(self, words):
      trie = {}
      for word in words:
         layer = trie
         for w in word:
            if w not in layer:
               layer[w] = {}
            layer = layer[w]
         layer["*"] = ()

      def dfs(word, num_concatenated_words):
         layer = trie

         for i, w in enumerate(word):
            if "*" in layer:
               if dfs(word[i:], num_concatenated_words + 1):
                  return True
            if w not in layer:
               return False
            layer = layer[w]

         if "*" in layer and num_concatenated_words >= 1:
            return True
         return False

      count = 0
     for word in words:
      count += dfs(word, 0)
   return count

ob = Solution()
words = ["hello", "world", "helloworld", "famous", "worldfamous", "programming"]
print(ob.solve(words))

入力

["hello", "world", "helloworld", "famous", "worldfamous", "programming"]

出力

2

  1. Pythonで行列内の囲まれた島の数を数えるプログラム

    バイナリ行列があるとします。ここで、1は土地を表し、0は水を表します。私たちが知っているように、島は周囲が水に囲まれているグループ化された1のグループです。完全に囲まれた島の数を見つける必要があります。 したがって、入力が次のような場合 3つの島があるため、出力は2になりますが、そのうちの2つは完全に囲まれています。 これを解決するには、次の手順に従います- 関数dfs()を定義します。これにはi、jが必要です iとjが行列の範囲内にない場合、 Falseを返す matrix [i、j]が0と同じ場合、 Trueを返す matrix [i、j]:=0 a:=df

  2. リスト内の最小数を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが表示されます。リストで利用可能な最小の番号を表示する必要があります ここでは、リストを並べ替えて最小の要素を取得するか、組み込みのmin()関数を使用して最小の要素を取得できます。 次に、以下の実装の概念を観察しましょう- 例 list1 = [101, 120, 104, 145, 99] # sorting using built-in function list1.sort() print("Smallest element is:", list1[0]) 出力 Smal