滑动窗口是双指针的一种应用,形象点说就是维护一个窗口,在窗口滑动的过程中进行窗口内数据的更新,并判断是否符合答案。、
初始时两个指针均指向开头,然后右指针依次向右滑动,在滑动的过程中需要收缩的时候进行左指针的移动,当右指针移出的时候结束循环即可。
之前在学习的时候看到别人总结了一个滑动窗口算法的框架,具体如下:
void fun(string s, string t){
map<char,int> need,window;
//在need中记录相应的信息
.....
int left=0,right=0;
int valid;//该变量用来判断是否得到相应的答案了
while(right<s.size()){
char c=s[right];//取出将要移入窗口内的数据
right++;
//下面进行窗口更新后一些数据的更新
.....
while(判断窗口是否需要收缩){
//是否需要进行相应的答案更新
......
char d=s[left];//将要移出窗口的数据;
left++;//收缩窗口
//窗口收缩后相应数据的更新
.......
}
}
}
其中need负责记录的是答案包含的数据信息,window记录的是窗口内数据的信息,当need中的信息是window中的子集时,就是得到一个答案了。