題目:
給你字符串 s 和整數(shù) k 。
請(qǐng)返回字符串 s 中長(zhǎng)度為 k 的單個(gè)子字符串中可能包含的最大元音字母數(shù)。
英文中的 元音字母 為(a, e, i, o, u)。
示例:
輸入:s = "abciiidef", k = 3
輸出:3
解釋?zhuān)鹤幼址?"iii" 包含 3 個(gè)元音字母。
解題方法:
滑窗法,統(tǒng)計(jì)加入窗內(nèi)和移到窗外的元音數(shù)量,獲得當(dāng)前窗內(nèi)元音數(shù)量,然后再根據(jù)當(dāng)前元音數(shù)量更新最大值。
與以往實(shí)現(xiàn)不同的是,在循環(huán)中利用一個(gè)統(tǒng)計(jì)長(zhǎng)度的變量來(lái)判斷是滑窗還是向窗內(nèi)添加數(shù)據(jù),這種實(shí)現(xiàn)方法的好處就是代碼寫(xiě)起來(lái)很簡(jiǎn)潔,也算是一種提升吧。
代碼和結(jié)果:
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;
}
};
運(yùn)行結(jié)果:
原題鏈接:https://leetcode-cn.com/problems/maximum-number-of-vowels-in-a-substring-of-given-length/