在 Python 中给定字典查找形成目标字符串的多种方法的程序
假设我们有一个名为 words 的字符串列表,其中所有元素的长度都相同。我们还有一个名为 target 的字符串。我们必须根据以下规则使用给定的单词生成目标 -
我们应该从左到右生成目标。
为了得到target的第i个字符(0-indexed),当target[i]与words[j][k]相同时,我们可以选择words中第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")
示例
让我们看下面的实现来更好地理解
from collections import Counterdef 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
以上是 在 Python 中给定字典查找形成目标字符串的多种方法的程序 的全部内容, 来源链接: utcz.com/z/355955.html