Leetcode 2930. Number of Strings Which Can Be Rearranged to Contain Substring

  • Leetcode 2930. Number of Strings Which Can Be Rearranged to Contain Substring
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:2930. Number of Strings Which Can Be Rearranged to Contain Substring

1. 解题思路

这一题的话思路上就是利用容斥原理来直接求总数。

显然,如果完全没有限制,那么总的string数目就是 2 6 n 26^n 26n,然后我们分别考虑l,e,t三个字母分别有一个,两个和三个不满足数目要求的情况,然后使用容斥原理进行计算即可。

唯一需要注意的就是,由于leet字符串中e有个两个,因此对于e的考虑时我们需要额外考虑一下e存在且仅有一个情况。

2. 代码实现

给出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。

你可能感兴趣的:(leetcode笔记,leetcode,2930,leetcode双周赛117,leetcode,medium,容斥原理,leetcode题解)