滑动窗口

滑动窗口是双指针的一种应用,形象点说就是维护一个窗口,在窗口滑动的过程中进行窗口内数据的更新,并判断是否符合答案。、
初始时两个指针均指向开头,然后右指针依次向右滑动,在滑动的过程中需要收缩的时候进行左指针的移动,当右指针移出的时候结束循环即可。
之前在学习的时候看到别人总结了一个滑动窗口算法的框架,具体如下:

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中的子集时,就是得到一个答案了。

posted @ 2020-09-03 10:37  万物小白  阅读(400)  评论(0编辑  收藏  举报