leetcode 1456. 定长子串中元音的最大数目-软件工程牛翰社区-编程开发-牛翰网

leetcode 1456. 定长子串中元音的最大数目

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; } };

 

请登录后发表评论

    没有回复内容