8ef7122a0698439c80ae7f976c73683b.png
【链接】:1456. 定长子串中元音的最大数目

class Solution {
public:
int maxVowels(string s, int k) {
int res = 0; // 记录整个过程中的最大值
int count = 0; // 记录当前滑动窗口内元音字母的数字
for(int l = 0, r = 0; r < s.size(); ++r) { // 右侧元素进入窗口
// 上来先判断是否是元音字母
if(s[r] == 'a' || s[r] == 'e' || s[r] == 'i' || s[r] == 'o' || s[r] == 'u') {
count++;
}
res = max(count, res);
// 看看是否超过了窗口的长度
if(r - l + 1 == k) {
// 左边要离开滑动窗口,看看s[l]是否是元音字母
if(s[l] == 'a' || s[l] == 'e' || s[l] == 'i' || s[l] == 'o' || s[l] == 'u') {
count--;
}
l++; // 左侧元素离开窗口
}
}
return res;
}
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

这是一个定长滑动窗口的题,一般会有l、r两个指针,这一过程主要有三个问题:

  1. 右侧元素进入窗口:只要r < s.size(),每次都会进入窗口
  2. 左侧元素离开窗口:当前窗口长度 = k
  3. 更新res的最大值