使用Python编写程序,查找由m个字母组成的长度为n的字符串,该字符串不包含长度大于1的回文子字符串。

使用Python编写程序,查找由m个字母组成的长度为n的字符串,该字符串不包含长度大于1的回文子字符串。

假设我们有m个字母和另一个值n。我们必须计算长度为n的字符串数量,这些字符串是由从这些m个字母中挑选的字母组成的,且字符串没有长度大于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个字符串。

要解决此问题,我们将按照以下步骤进行设置−

  • p:= 10 ^ 9 + 7
  • 如果n与1相同,则
    • 返回m mod p
  • 如果n等于2,则
    • 返回m *(m-1)mod p
  • 如果m ≤ 2,则
    • 返回0
  • 返回m (m-1)((m-2)^(n-2)mod p)mod p

例子

让我们看下面的实现,以便更好地理解−

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程