【发布时间】:2021-11-30 16:46:52
【问题描述】:
我刚刚开始学习动态规划,并且能够解决一些基本问题,例如斐波那契、背包和其他一些问题。遇到问题 下面,我被卡住了,不知道如何继续前进。让我感到困惑的是,在这种情况下,基本情况是什么,以及重叠的问题。不知道 这使我无法发展关系。在这个例子中,它们不像我之前解决的那样明显。
假设给定一个字符串 origString、一个字符串 toMatch 和一个大于或等于 0 的数字 maxNum。我们如何计算有多少种方法可以将字符串 origString 的非空和非重叠子字符串的 maxNum 个数取为组成字符串 toMatch?
示例:
如果 origString = "ppkpke",并且 toMatch = "ppke"
maxNum = 1:countWays("ppkpke", "ppke", 1) 将给出 0,因为 toMatch 不是 origString 的子字符串。
maxNum = 2: countWays("ppkpke", "ppke", 2) 将给出 4,因为由 "ppkpke" 组成的 2 个子字符串的 4 种不同组合可以生成 "ppke"。 这些字符串是 "ppk" & "e", "pp" & "ke" , "p" & "pke" (不包括 "p") 和 "p" & "pke" (不包括 "k")
【问题讨论】:
-
这与Sampling indices from a list with constraints 非常相似,只是您只要求计数而不是结果列表。
-
例如,如果您想要总路数而不为 k 选择特定值,则
from Bio import pairwise2; print(len(pairwise2.align.globalxx('ppkpke', 'ppke')))将打印 4。 -
请说明
countWays("ppke", "ppke", 2)的预期输出。
标签: algorithm dynamic-programming