给定两个字符串 s
和 t
。返回 s
中包含 t
的所有字符的最短子字符串。如果 s
中不存在符合条件的子字符串,则返回空字符串 ""
。
如果 s
中存在多个符合条件的子字符串,返回任意一个。
该题在力扣上属于困难题,第一次思路为使用滑动窗口用哈希表统计窗口内每个字符数量,同时再用一个哈希表统计字符串t的字符频率,但是考虑到每次滑动都要对比两个哈希表内的数量,开始寻求更高效的解法,故记录.
算法概述:
-
目标:从字符串
s
中找到最短的子字符串,这个子字符串包含了t
中所有字符,并且字符的数量不小于t
中该字符的数量。如果找不到这样的子字符串,则返回空字符串。 -
滑动窗口:通过左右指针(
left
和right
)来维护一个“窗口”,该窗口不断扩展直到包含了t
中的所有字符,接着尝试收缩窗口来找到最小的符合条件的窗口。
算法细节:
-
计数频率:首先,统计
t
中每个字符出现的