滑块

75 阅读1分钟

定长滑动窗口

class Solution {
public:
    int maxVowels(string s, int k) {
        int ans=0;int val=0;

        for(int i=0;i<s.size();i++){
            if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u') {
                val++; //右边加入
            }
            if(i<k-1) continue; //定长限制
            ans=ans<val?val:ans; //比较最值
            char temp=s[i-k+1];
            if (temp == 'a' || temp == 'e' || temp == 'i' || temp == 'o' || temp == 'u') {
                val--; //左边退出
            }
        }
        return ans;
    }
};

不定长滑动窗口

class Solution {
public:   
    int lengthOfLongestSubstring(string s) {        
    map<char,int> map;        
    int ans=0,l=0;        
    if(s.size()==1) return 1;        
    for(int i=0;i<s.size();i++){            
        int temp=s[i];            
        map[temp]++;//长度增加           
         while(map[temp]>1){  //左边退出条件,长度变短               
             map[s[l]]--;               
             l++; 
       }           
     ans=ans<i-l+1?i-l+1:ans; //比较长度极值       
     }     
   return ans;    
    }
};

求子数组格式【至少/大于】 ans+=left;

求子数组格式【小于】 ans+=i-left+1;

 恰好型滑动窗口 

1.设定求子数组格式【至少/大于】类型方法

2.大于k-1的子数组-大于k的子数组