给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。
示例:输入: S = "ADOBECODEBANC", T = "ABC"
输出: "BANC"
说明:如果 S 中不存这样的子串,则返回空字符串 ""。
如果 S 中存在这样的子串,我们保证它是唯一的答案。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-window-substring
方法1:该方法主要使用的是滑动窗口思想,大概含义:
用left,right表示滑动窗口的左边界和右边界,通过改变i,j来扩展和收缩滑动窗口,可以想象成一个窗口在字符串上游走,当这个窗口包含的元素满足条件,即包含字符串T的所有元素,记录下这个滑动窗口的长度right-left +1,这些长度中的最小值就是要求的结果
具体实现过程如下:
(1)计算目标值t中每个char的个数,作为char的需求清单need,即需要need中k*v个char;
用处:当检索到滑动窗口中存在一个char时,就抵消掉need中对应的char值,即need[char] -1 ;当检索到窗口函数中不存在一个char时,就增加need中对应的char值,即need[char] +1 ;
(2)记录目标值t的长度,needCnt,即总共需要的字符串数,needCnt等于need中value的总和。
用处:取代遍历need,通过总数来判断滑动窗口是否包含了所有的t中char
(3)不断增加指针right使滑动窗口增大,直到窗口包含了T的所有元素:当窗口包含了所有的need字符(即needCnt=0),意味着可以剔除窗口括进来

最低0.47元/天 解锁文章
7306

被折叠的 条评论
为什么被折叠?



