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; } };
没有回复内容