定长滑动窗口
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的子数组