Leetcode Java Replace the Substring for Balanced String
업데이트:
문제
코드
class Solution {
public int balancedString(String s) {
int[] counts = new int[128];
for (char c : s.toCharArray()) {
counts[c]++;
}
int length = s.length();
int max = length / 4;
int result = length;
int i = 0;
for (int j = 0; j < length; j++) {
counts[s.charAt(j)]--;
while (i < length && counts['Q'] <= max && counts['W'] <= max && counts['E'] <= max && counts['R'] <= max) {
result = Math.min(result, j - i + 1);
counts[s.charAt(i++)]++;
}
}
return result;
}
}
결과
설명
-
‘Q’, ‘W’, ‘E’, ‘R’ 문자로 구성된 문자열 s가 균등한 문자의 배분이 되도록 하기 위한 최소 부분 문자열의 길이를 구하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- counts는 각 문자의 갯수를 계산하기 위한 변수로, 128 크기의 정수 배열로 초기화하고 s의 각 문자 갯수를 넣어준다.
- length는 s의 길이를 저장한 변수이다.
- max는 각 문자의 상한 갯수를 저장할 변수로, $\frac{length}{4}$로 초기화한다.
- result는 결과를 저장할 변수로, 최대 부분 문자열의 길이인 length로 초기화한다.
- i는 변환 문자의 시작 부분을 저장할 변수로, 0으로 초기화한다.
- 0부터 length 미만까지 j를 증가시키며 아래를 반복한다.
- counts 내 s의 j번째 문자에 해당하는 갯수를 감소시킨다.
- i가 length 미만이면서, counts 내 ‘Q’, ‘W’, ‘E’, ‘R’의 해당하는 갯수가 max 이하일 때 까지 아래를 반복한다.
- result에 result와 $j - i + 1$ 중 변환 갯수 중 작은 값을 저장한다.
- counts의 s내 i번째 문자에 해당하는 값을 증가시켜 변환 갯수를 복구시켜주고, i도 증가시켜 다음 문자열로 이동시켜준다.
- 반복이 완료되면 최소 부분 문자열의 길이가 저장된 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기