题目描述
给出两个字符串S和T,要求在O(n)的时间复杂度内在S中找出最短的包含T中所有字符的子串。
例如:
S ="ADOBECODEBANC"
T ="ABC"
找出的最短子串为"BANC".
注意:
如果S中没有包含T中所有字符的子串,返回空字符串 “”;
满足条件的子串可能有很多,但是题目保证满足条件的最短的子串唯一。
思路:
初始化left right双指针为0 map<char,int> 记录下T中每个字符所需的数目
right向右移动(滑动)当遇到T中的字符时,map中相应的所需字符数目--
(关键点:需要通过map>0 判断该字符是不是有效字符还是多余字符)
若为有效字符 那么count++
当count==T.size 那么组配成功 记录下当前区间长度
(关键点 需要将left右移动到第一个这样的位置:该位置是T中字符) 确保区间足够小
下一步,舍弃掉区间左边界left的第一个有效字符 同时right继续向右滑动(即过滤掉多余字符)
string minWind