1456. 定长子串中元音的最大数目[中等]

87 阅读1分钟

题目

给你字符串 s 和整数 k 。

请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。

英文中的 元音字母 为(a, e, i, o, u)。

  • 来源:力扣(LeetCode)
  • 链接:leetcode.cn/problems/ma…
  • 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法一

思路

  • 滑动窗口

代码

    public int maxVowels(String s, int k) {
        char[] str = s.toCharArray();
        int n = str.length;
        int i = 0;
        int j = 0;
        int max = 0;
        int count = 0;
        while (j < n) {
            if (isVowel(str[j])) {
                count++;
            }
            
            if (j - i + 1 == k) {
                max = Math.max(max, count);
                if (isVowel(str[i])) {
                    count--;
                }
                i++;
            } 
            j++;
        }
        return max;
    }

    private boolean isVowel(char c) {
        return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
    }
  • 上面的代码还是有点丑。

官方代码

    public int maxVowels(String s, int k) {
        char[] str = s.toCharArray();
        int i = 0, j = 0;
        int count = 0;
        int max = 0;
        for ( ; j < k; j++) {
            if (isVowel(str[j])) {
                count++;
            }
        }
        max = Math.max(max, count);

        for (; j < s.length(); j++) {
            if (isVowel(str[i++])) {
                count--;
            }
            if (isVowel(str[j])) {
                count++;
            }
            max = Math.max(max, count);
        }
        return max;
    }

    private boolean isVowel(char c) {
        return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
    }