문제출처
//슬라이딩 윈도우
for(int i=0, j=0; i<DNA_len; i++){
//슬라이딩 윈도우를 진행하기전 초기화 단계 (Update Logic)
switch(DNA.charAt(i)){
case 'A':
check[0]++;
break;
case 'C':
check[1]++;
break;
case 'G':
check[2]++;
break;
case 'T':
check[3]++;
break;
default:
break;
}
//슬라이딩 윈도우 시작
if(i >= sub_len-1){
int cnt = 0;
//check배열과 min 조건이 같은지
for(int k=0; k<4; k++){
if(min[k] <= check[k])
cnt++;
}
//요구조건 만족시
if(cnt == 4)
result++;
//슬라이딩 윈도우에 문자가 빠질때 (Update Logic)
switch(DNA.charAt(j)){
case 'A':
check[0]--;
break;
case 'C':
check[1]--;
break;
case 'G':
check[2]--;
break;
case 'T':
check[3]--;
break;
default:
break;
}
//부분 문자열의 길이를 지키기 위해
j++;
//for문에서 i++
}
}
슬라이딩 윈도우의 크기는 부분문자열의 길이와 같다.
그 부분 문자열의 길이가 되기 전까지 문제에 따른 조건들을 Update시켜주는게 가장 중요한 아이디어이다.