package
0.0.0-20241220224003-b7cf03a90b2b
Repository: https://github.com/szhou12/leetcode-go.git
Documentation: pkg.go.dev
# README
2953. Count Complete Substrings
Solution idea
Sliding Window: Flex + Fix
- 同时满足两个条件的滑窗:"挑软柿子捏"
- 条件2比较好解决 - 每个相邻的字符的差的绝对值不超过2。先以条件2为基准,把整个字符串分割成若干个区间。
- 使用 Sliding Window Flex 模版。
- 每个区间以内再找符合条件1的子区间个数。
- 隐含条件:输入的字符串只包含26个英文小写字母。
- 与条件1结合:一个区间内,若有1个字母,那么符合条件的子区间的长度必为 1k;若有2个字母,那么符合条件的子区间的长度必为 2k;若有3个字母,那么符合条件的子区间的长度必为 3k;...;若有26个字母,那么符合条件的子区间的长度必为 26k。
- 所以,每个区间先统计拥有不同字母的种类。假设有 T 种,那么满足条件1的子区间长度可以是:1k, 2k, 3k, ..., Tk。
- 每个子区间长度 (1k, 2k, 3k, ..., Tk) 依次使用 Sliding Window Fix 模版的滑窗。
- 每滑动一次,统计滑窗内字母的频次。若存在一个字母的频次不是k次,那么此时的子区间不满足条件1;反之,找到一个满足条件1的子区间。
Time complexity = $O(n2626)$
Explanation: The whole array is splited into m
chunks (each chunk has max size of n
while the total size of all chunks together is n
). Each chunk iterates at most 26 times of window size while each window size iterates at most 26 times to check each character's frequency.