题目:
给你字符串 s 和整数 k 。
请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。
英文中的 元音字母 为(a, e, i, o, u)。
示例:
输入:s = "abciiidef", k = 3
输出:3
解释:子字符串 "iii" 包含 3 个元音字母。
解题方法:
滑窗法,统计加入窗内和移到窗外的元音数量,获得当前窗内元音数量,然后再根据当前元音数量更新最大值。
与以往实现不同的是,在循环中利用一个统计长度的变量来判断是滑窗还是向窗内添加数据,这种实现方法的好处就是代码写起来很简洁,也算是一种提升吧。
代码和结果:
class Solution {
public:
int check(char c)
{
if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u')
return 1;
else
return 0;
}
int maxVowels(string s, int k) {
int cnt=0;
int sz=0;
int maxv=0;
for(int i=0;i<s.size();i++)
{
if(sz>=k)
{
cnt-=check(s[i-k]);
cnt+=check(s[i]);
}
else
{
cnt+=check(s[i]);
sz++;
}
maxv=maxv>cnt?maxv:cnt;
}
return maxv;
}
};
运行结果:原题链接:https://leetcode-cn.com/problems/maximum-number-of-vowels-in-a-substring-of-given-length/