leetcode 1456. 定长子串中元音的最大数目
法一:借助队列
class Solution {
public:
int maxVowels(string s, int k) {
int size = s.size(), resMax = 0;
queue<bool> qVowel;
for(int i = 0;i < k;i++){
if(s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u'){
resMax++;qVowel.emplace(true);
}
else qVowel.emplace(false);
}
int now = resMax;
for(int i = k;i < size;i++){
if(qVowel.front() == true) now--;
qVowel.pop();
if(s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u'){
now++;qVowel.emplace(true);
}
else qVowel.emplace(false);
if(resMax < now) resMax = now;
}
return resMax;
}
};
法二:不使用队列,每次窗口移动都判断一次旧窗头和新窗尾
class Solution {
public:
int maxVowels(string s, int k) {
int size = s.size(), resMax = 0;
for(int i = 0;i < k;i++){
if(s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u'){
resMax++;
}
}
int now = resMax;
for(int i = k;i < size;i++){
if(s[i-k] == 'a' || s[i-k] == 'e' || s[i-k] == 'i' || s[i-k] == 'o' || s[i-k] == 'u') now--;
if(s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u'){
now++;
}
if(resMax < now) resMax = now;
}
return resMax;
}
};