原理
滑动窗口使用头尾两个指针来维护一个连续区间,主要用来找到满足指定条件的子区间。
-
当区间长度不固定时可以枚举右端点,利用指定的条件来找右端点,反之亦可。如:
-
当区间长度固定时,通常采用一些缓存的手段,每次右移区间时,将左端点从区间摘出去,右端点加入缓存,更新结果。如:
例题
3. 无重复字符的最长子串
找无重复数据的连续子区间最大长度,很容易想到滑动窗口,决定区间端点的因素是区间内的元素不能重复,因此可以使用哈希表来查询是否重复。代码:
int lengthOfLongestSubstring(string s) {
if(s.size()<2) return s.size();
int lf=0,rt=0, maxLen = 0;
unordered_set<char> look;
for(;rt<s.size();rt++)
{
while(look.find(s[rt])!=look.end())
look.erase(s[lf++]);
maxLen = max(maxLen,rt-lf+1);
look.insert(s[rt