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

2020-07-26  本文已影响0人  WAI_f

题目:

给你字符串 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/

上一篇 下一篇

猜你喜欢

热点阅读