Giả sử chúng ta có m số chữ cái và một giá trị n khác. Chúng ta phải đếm số chuỗi có độ dài n được tạo bằng các chữ cái bằng cách lấy từ m chữ cái này và chuỗi không có chuỗi con palindromic có độ dài lớn hơn 1. Nếu câu trả lời quá lớn thì hãy sửa đổi kết quả bằng 10 ^ 9 + 7.
Vì vậy, nếu đầu vào là n =2 m =3, thì đầu ra sẽ là 6 vì m =3, vì vậy nếu các bảng chữ cái là {x, y, z}, chúng ta có thể tạo ra các chuỗi như:[xx, xy, xz , yx, yy, yz, zx, zy, zz] nhưng [xx, yy, zz] không hợp lệ nên có 6 chuỗi.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- p:=10 ^ 9 + 7
- nếu n giống 1, thì
- trả lại m mod p
- nếu n giống 2 thì
- return m * (m - 1) mod p
- nếu m <=2, thì
- trả về 0
- trả về m * (m-1) * ((m-2) ^ (n-2) mod p) mod p
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
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))
Đầu vào
3, [1,2,3,4,1]
Đầu ra
6