1456. 定长子串中元音的最大数目 - 力扣(LeetCode)https://leetcode.cn/problems/maximum-number-of-vowels-in-a-substring-of-given-length/description/
class Solution {
public:
int maxVowels(string s, int k) {
int left=0;//左指针下标
int right=0;//右指针下标
int lenght=s.length();//字符串长度
int count=0;//元音字母数目
int max_count=0;//当前最大元音字母数目
while(right<lenght)//右指针对应数组下标小于字符串长度
{
if(s[right]=='a'||s[right]=='e'||s[right]=='i'||s[right]=='o'||s[right]=='u')//判断当前右指针是否是元音字母
{
count=count+1;
}
if(right-left+1>k)//窗口大小大于K时
{
if(s[left]=='a'||s[left]=='e'||s[left]=='i'||s[left]=='o'||s[left]=='u')
{
count=count-1;
}
left=left+1;
}
right=right+1;
max_count=max(max_count,count);//更新最大元音字母数目
}
return max_count;
}
};
/*滑动窗口:
左右指针:
左指针对应位置指向窗口的第一个元素;
右指针对应位置指向窗口的最后一个元素
窗口大小是右指针对应数组下标减去左指针对应数组/字符串下标加一;
整个过程,右指针对应数组/字符串下标小于数组/字符串长度
左右指针起始位置都是数组/字符串下标为0的位置
已知窗口的长度为K
(1)窗口大小还没有到或恰好为K时(右指针下标位置-0+1的结果小于等于K)
左指针指向数组/字符串下标0,若结果小于K且右指针对应位置小于数组/字符串长度,则左指针不动,右指针向右移动一位;
(2)窗口大小大于K时,左指针需要开始移动(右指下标位置-0+1的结果大于K)
左指针和右指针都要同时向右移动一位
每移动左指针时检查左指针指向元素是否是元音字母:
若是该窗口元音字母个数减一,若不是,则不变
每移动右指针时检查右指针指向元素是否是元音字母:
若是该窗口元音字母个数加一,若不是,则不变
每一次窗口变化结束,都只保留元音字母个数最大的结果
*/