本文主要是介绍Leetcode 2949. Count Beautiful Substrings II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- Leetcode 2949. Count Beautiful Substrings II
- 1. 解题思路
- 2. 代码实现
- Leetcode 2949. Count Beautiful Substrings II
1. 解题思路
这一题真的很丢脸,居然没有搞定,是看了大佬们的思路之后才想明白的,就感觉丢脸丢大了……
这道题讲道理挺简单的,而且相似类型的题目其实以前做过挺多的了,想不通但是为啥没有直接想到思路……
这道题的话如果没有平方整除 k k k的限制,只是要求元音和辅音字符相同的子串的数目,其实问题就非常简单,只要记录一下两者的差值,然后在相同项之间取开始和结束点即可,即 C n 2 C_n^2 Cn2种选择方法。
这里复杂也就是复杂在多了一个平方整除 k k k的限制要求,不过事实上这个也不麻烦的,我们在多一个字符串总长度的counter即可,要使得一个数的平方为 k k k的倍数,那么这个数一个是某一个数 p p p的倍数,且 p p p满足 p p p为最小的使得 p 2 ≡ 0 ( m o d k ) p^2 \equiv 0 (mod\ k) p2≡0(mod k)。
然后,我们重复上面的思路找一下每一种可能性的首尾节点的可能选取方式即可。
2. 代码实现
给出python代码实现如下:
class Solution:def beautifulSubstrings(self, s: str, k: int) -> int:p = 1for i in range(1, k+1):if i * i % k == 0:p = ibreakcnt = defaultdict(int)cnt[(0, 0)] = 1delta, num = 0, 0for ch in s:if ch in "aeiou":delta += 1num += 1else:delta -= 1cnt[(delta, num % p)] += 1ans = 0for n in cnt.values():ans += n * (n-1) // 2return ans
提交代码评测得到:耗时196ms,占用内存20.7MB。
这篇关于Leetcode 2949. Count Beautiful Substrings II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!