[Sliding Window, Medium] Maximum Number of Vowels in a Substring of Given Length

송재호·2025년 3월 12일
0

https://leetcode.com/problems/maximum-number-of-vowels-in-a-substring-of-given-length/description/?envType=study-plan-v2&envId=leetcode-75

슬라이딩 윈도우니 시간복잡도는 O(N)을 목표로 한다.

기본적으로 첫 합계를 계산해두고 윈도우를 이동하면서 나머지를 계산해보는 것은 당연,
그 외에도 모음인지 판단해야 한다.

모음인지 판단하는 법: String을 만들고 indexOf로 체크하거나, 128 길이의 boolean이든 int든 배열로 아스키를 표현해서 판단하거나.

처음 구해둔 sum이 가변적으로 변하면서 max를 갈아치운 다는 것이 중요
오른쪽 새 인덱스가 모음이면 +1
왼쪽 빠지는 인덱스가 모음이면 -1

윈도우 이동 시마다 해당 결과를 sum에 합산하며 max를 갈아치운다.

class Solution {
    public int maxVowels(String s, int k) {
        String vowels = "aeiou";

        int vowelsSum = 0;
        for (int i=0; i<k; i++) {
            if (vowels.indexOf(s.charAt(i)) != -1) {
                vowelsSum++;
            }
        }

        int max = vowelsSum;
        for (int i=k; i<s.length(); i++) {
            int temp = 0;
            if (vowels.indexOf(s.charAt(i)) != -1) {
                temp++;
            }
            if (vowels.indexOf(s.charAt(i - k)) != -1) {
                temp--;
            }

            vowelsSum += temp;
            max = Math.max(vowelsSum, max);
        }

        return max;
    }
}
profile
식지 않는 감자

0개의 댓글