76. 最小覆盖子串
思路
(滑动窗口)
这道题要求我们返回字符串 s 中包含字符串 t 的全部字符的最小窗口,我们利用滑动窗口的思想解决这
个问题。因此我们需要两个哈希表, hs 哈希表维护的是 s 字符串中滑动窗口中各个字符出现多少次,
ht 哈希表维护的是 t 字符串各个字符出现多少次。如果 hs 哈希表中包含 ht 哈希表中的所有字符,并
且对应的个数都不小于 ht 哈希表中各个字符的个数,那么说明当前的窗口是可行的,可行中的长度最短
的滑动窗口就是答案。
过程如下:
1、遍历 t 字符串,用 ht 哈希表记录 t 字符串各个字符出现的次数。
2、定义两个指针 j 和 i , j 指针用于收缩窗口, i 指针用于延伸窗口,则区间 [j,i] 表示当前滑动窗
口。首先让 i 和 j 指针都指向字符串 s 开头,然后枚举整个字符串 s ,枚举过程中,不断增加 i 使滑动
窗口增大,相当于向右扩展滑动窗口。
3、每次向右扩展滑动窗口一步,将 s[i] 加入滑动窗口中,而新加入了 s[i] ,相当于滑动窗口维护的
字符数加一,即 hs[s[i]]++ 。