假设我们有 m 个字母和另一个值 n。我们必须通过从这 m 个字母中提取字母创建长度为 n 的字符串的数量,并且字符串没有长度大于 1 的回文子字符串。如果答案太大,则将结果修改为 10^9+7。
所以,如果输入像 n = 2 m = 3,那么输出将是 6,因为 m = 3,所以如果字母是 {x,y,z},我们可以生成这样的字符串:[xx,xy,xz ,yx,yy,yz,zx,zy,zz] 但 [xx,yy,zz] 无效,所以有 6 个字符串。
让我们看看以下实现以获得更好的理解 -
def solve(n, m): p = 10**9+7 if n == 1: return m % p if n == 2: return m * (m - 1) % p if m <= 2: return 0 return m * (m - 1) * pow(m - 2, n - 2, p) % p n = 2 m = 3 print(solve(n, m))
3, [1,2,3,4,1]输出结果
6