오늘 할일
1. LeetCode
2. 여행일정수정
3. 교육봉사
4. 창엔 회의
오늘 한일
1. LeetCode
class Solution {
public int maxVowels(String s, int k) {
String vowels="aeiou";
char[] string=s.toCharArray();
int size=string.length;
int count=0;
int max=0;
for(int i=0; i<size-k+1; i++){
count=0;
for(int j=0; j<k; j++){
if(vowels.indexOf(string[i+j])!=-1){
count++;
}
}
if(count>max) {
max = count;
}
}
return max;
}
}
굉장히 순조로울 것으로 예상된다. 거의 마지막 테스트케이스에서 Time Limit Exceeded가 발생했다. 최적화를 생각해보자.
모음이 시작부분에 등장하는 문자열만 계산하도록 코드를 수정해보았다.
public int maxVowels(String s, int k) {
String vowels="aeiou";
char[] string=s.toCharArray();
int size=string.length;
int count=0;
int max=0;
for(int i=0; i<size-k+1; i++){
if(i<size-k && vowels.indexOf(s.charAt(i))==-1)
continue;
count=0;
for(int j=0; j<k; j++){
if(vowels.indexOf(string[i+j])!=-1){
count++;
}
}
if(count>max) {
max = count;
}
}
return max;
}
테스트 케이스가 하나 넘어갔다.
다음으로 시도한 방법은 중첩 for문을 substring하고 filter로 모음이 포함된 경우를 count하게 작성해보았다.
public int maxVowels(String s, int k) {
String vowels="aeiou";
char[] string=s.toCharArray();
int size=string.length;
int count=0;
int max=0;
for(int i=0; i<size-k+1; i++){
if(i<size-k && vowels.indexOf(s.charAt(i))==-1)
continue;
count=(int) s.substring(i,i+k)
.chars()
.filter(c->vowels.indexOf(c)!=-1)
.count();
if(count>max) {
max = count;
}
}
return max;
}
하지만 테스트 케이스 102번에서 통과하지 못했다. 기존의 코드로 회귀해보자.