这一题的话思路上就是利用容斥原理来直接求总数。
显然,如果完全没有限制,那么总的string数目就是 2 6 n 26^n 26n,然后我们分别考虑l,e,t三个字母分别有一个,两个和三个不满足数目要求的情况,然后使用容斥原理进行计算即可。
唯一需要注意的就是,由于leet字符串中e有个两个,因此对于e的考虑时我们需要额外考虑一下e存在且仅有一个情况。
给出python代码实现如下:
class Solution:
def stringCount(self, n: int) -> int:
MOD = 10**9+7
if n < 4:
return 0
tot = pow(26, n, mod=MOD)
l = pow(25, n, mod=MOD)
e = (pow(25, n, mod=MOD) + n * pow(25, n-1, mod=MOD)) % MOD
t = l
le = (pow(24, n, mod=MOD) + n * pow(24, n-1, mod=MOD)) % MOD
et = le
lt = pow(24, n, mod=MOD)
let = (pow(23, n, mod=MOD) + n * pow(23, n-1, mod=MOD)) % MOD
return (tot - l-e-t+le+et+lt-let + MOD * 4) % MOD
提交代码评测得到:耗时36ms,占用内存16.1MB。