python—使用k个字符形成长度为n的字符串的方法的数目,这样最多两个相邻字符可以相同

dvtswwa3  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(365)

嗨,请让我知道我的关系有什么问题。
我的逻辑是:
分配第一个的方法的数目 element=k 还有很多方法 next (n-1) 元素是不同的 (k-1)*f(n-2) 以及分配两个相同元素的方法: k + (k-1)*f(n-1) 因此关系: no. of ways = ∑(k + (k-1)*f(n-1) + k + (k-1)*f(n-1)) 我可以看到一些错误,如包含重复,但我无法找出关系。
您还可以找到以下代码:

def count_num_ways(n, k):
        dp = [0 for i in range(n+1)]

        dp[0] = 0
        dp[1] = k

        for i in range(2, n+1):
            dp[i] =  sum(
                [
                     k+( k-1 )*dp[n-2],
                     k+(k-1)*dp[n-1]-k
                ]
            )

        print(dp)

谢谢。

gupuwyp2

gupuwyp21#

f(n) 等于在最后两个字符相同的情况下形成n个元素的方法数,并让 g(n) 等于在最后两个字符不同的情况下形成n个元素的方法数。
作为 f(n) ,因为最后两个字符是相同的,所以我们需要选择一个不同的字符 (k-1) 最后两个字符将是不同的 g(n-1) ,结果是:

f(n) = (k-1)*g(n-1)

作为 g(n) ,由于最后两个字符不同,我们可以选择相同的字符或不同的字符。对于第一种情况,相同的字符是唯一的选择: 1 ,最后两个字符相同: f(n-1) . 对于第二种情况,不同的字符选项: (k-1) 以及不同的功能: g(n-1) ,结果是:

g(n) = 1*f(n-1) + (k-1)*g(n-1)

对于第一个元素,我们选择一个字符 k ,答案是

k*g(n-1)

附言:

你可以代替 f(n-1) 在第二个等式中,但我认为这更直观。

相关问题