Categorygithub.com/szhou12/leetcode-goleetcode1358-Number-of-Substrings-Containing-All-Three-Characters
package
0.0.0-20241220224003-b7cf03a90b2b
Repository: https://github.com/szhou12/leetcode-go.git
Documentation: pkg.go.dev
# README
1358. Number of Substrings Containing All Three Characters
Solution idea
Two Pointers - Sliding Window
思路总结
- 本题求满足条件的 substring 个数,很明显属于 Two Pointers 中的 "Sliding Window 长度可变 == Subarray 类型" :arrow_right: 使用 模版Flex
- 两个难点 (我在解题时, 导致bug的两个点):
- 每次right停下来时, substring 个数怎么数?
- 需要明确 right 停下来时,滑窗的物理意义是什么:此时,滑窗内表示a, b, c每个字母至少包含一个,换句话说,这表示锚定当前left,right直至末尾的所有substring都满足条件。所以,substring 个数 = (n-1) - (right-1) + 1
[X X X X] X X X X X X -------------------------- left right n-1
- 我一开始写的是
个数+=1
,相当于只算了滑窗圈起来的这一个substring,肯定少算了
- 每次right停下来,需要有条件地 update result
- right停下来的条件可以是: 1. right越界了;2. 滑窗内条件满足了
- 需要注意的是,right越界时,并不一定滑窗内条件满足了,所以不能直接update result
- 所以,需要check此时滑窗内条件是否满足,只有满足时才update result
- 每次right停下来时, substring 个数怎么数?
Time complexity = $O(n)$
Resource
【每日一题】LeetCode 1358. Number of Substrings Containing All Three Characters