슬라이딩 윈도우니 시간복잡도는 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;
}
}