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

Pythonで辞書を指定してターゲット文字列を形成する方法をいくつか見つけるプログラム


単語と呼ばれる文字列のリストがあり、すべての要素が同じ長さであるとします。 targetという文字列もあります。次のルールの下で、指定された単語を使用してターゲットを生成する必要があります-

  • ターゲットは左から右に生成する必要があります。

  • target[i]がwords[j] [k]と同じ場合、targetのi番目の文字(0インデックス)を取得するために、単語内のj番目の文字列のk番目の文字を選択できます。

  • j番目の単語文字列のk番目の文字を使用すると、x<=k。

    の単語ではどの文字列のx番目の文字も使用できなくなります。
  • ターゲット文字列全体が形成されるまで、これらのプロセスを繰り返します。

したがって、単語からターゲットを取得する方法をいくつか見つける必要があります。答えは非常に大きい可能性があるため、10 ^ 9+7を法として答えを返します。

したがって、入力がwords =["pqqp"、 "qppq"]、target ="qpq"の場合、出力は4になります。

  • "qpq"->インデックス0( "qppq")、インデックス1( "qppq")、インデックス2( "pqqp")

  • "qpq"->インデックス0( "qppq")、インデックス1( "qppq")、インデックス3( "qppq")

  • "qpq"->インデックス0( "qppq")、インデックス2( "qppq")、インデックス3( "qppq")

  • "qpq"->インデックス1( "pqqp")、インデックス2( "qppq")、インデックス3( "qppq")

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

  • m:=単語数、

  • n:=ターゲットのサイズ

  • d:=m個の異なる空のマップで満たされたサイズmのリスト

  • 単語のwごとに、実行します

    • wの各インデックスjと単語cについて、実行します

      • d [j、c]:=d [j、c] + 1

  • 関数dfs()を定義します。これにはi、jが必要です

  • iがnと同じ場合、

    • 1を返す

  • iがmと同じ場合、

    • 0を返す

  • return(dfs(i、j + 1)+ dfs(i + 1、j + 1)* d [j、target [i]])mod(10 ^ 9 + 7)

  • メインメソッドからdfs(0、0)を返します

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

from collections import Counter
def solve(words, target):
   m, n = len(words[0]), len(target)
   d = [Counter() for _ in range(m)]
   for w in words:
      for j, c in enumerate(w):
         d[j][c] += 1

   def dfs(i, j):
      if i == n:
         return 1
      if j == m:
         return 0
      return (dfs(i, j+1) + dfs(i+1, j+1) * d[j][target[i]]) % int(1e9 + 7)

   return dfs(0, 0)

words = ["pqqp","qppq"]
target = "qpq"
print(solve(words, target))

入力

"95643", "45963"

出力

4

  1. 与えられた文字列の単語を数えるPythonプログラム?

    「文字列」と「単語」があり、Pythonを使用して文字列内でこの単語の出現回数を見つける必要があるとします。これは、このセクションで行うことです。特定の文字列内の単語の数を数え、それを出力します。 特定の文字列の単語数を数える 方法1:forループを使用する #方法1:forループの使用 test_stirng = input("String to search is : ") total = 1 for i in range(len(test_stirng)):    if(test_stirng[i] == ' ' or te

  2. 指定された文字列のバイナリ表現で最大の連続する1の長さを見つけるPythonプログラム。

    数を指定して、バイナリ表現で最も長い連続する1の長さを見つけます。 例 Input: n = 15 Output: 4 The binary representation of 14 is 1111. アルゴリズム Step 1: input the number. Step 2: use one counter variable c=0. Step 3: Count the number of iterations to reach i = 0. Step 4: This operation reduces length of every sequence of 1s by one.