Leetcode Java Reorganize String
업데이트:
문제
코드
class Solution {
public String reorganizeString(String s) {
int length = s.length();
int[] hash = new int[26];
for (char c : s.toCharArray()) {
hash[c - 'a']++;
}
int letter = 0;
int count = 0;
for (int idx = 0; idx < hash.length; idx++) {
if (hash[idx] > count) {
letter = idx;
count = hash[idx];
}
}
if (count > (length + 1) / 2) {
return "";
}
char[] result = new char[length];
int index = 0;
while (hash[letter] > 0) {
result[index] = (char) (letter + 'a');
index += 2;
hash[letter]--;
}
for (int idx = 0; idx < hash.length; idx++) {
while (hash[idx] > 0) {
if (index >= length) {
index = 1;
}
result[index] = (char) (idx + 'a');
index += 2;
hash[idx]--;
}
}
return String.valueOf(result);
}
}
결과
설명
- s의 문자들이 동일한 문자가 붙지 않도록 재 정렬해서 반환하는 문제이다.
- 동일한 문자가 붙을 수 밖에 없는 경우, 빈 문자열인 ““을 주어진 문제의 결과로 반환한다.
- 문제 풀이에 필요한 변수를 정의한다.
- length는 s의 길이를 저장한 변수이다.
- counts는 s의 각 문자 별 발생 횟수를 저장할 변수로, s의 각 문자를 반복하여 개수를 계산해준다.
- letter와 count는 가장 많이 발생한 문자의 위치와 개수를 저장할 변수로, counts를 반복하여 가장 많이 발생한 문자의 위치와 개수를 저장해준다.
- count가 length의 절반 이상인 경우, 동일한 문자가 반드시 붙으므로 ““을 주어진 문제의 결과로 반환한다.
- result는 결과 문자열을 만들기 위한 배열로, length 길이의 문자 배열로 초기화한다.
- index는 result에 문자를 순차적으로 넣기 위한 위치 변수로, 0으로 초기화한다.
- counts의 letter 문자의 개수가 0 초과일 때까지 아래를 반복한다.
- result의 index번째 위치에 letter를 영문자로 변환하여 넣어준다.
- index를 2씩 증가시켜 같은 문자가 붙지 않도록 띄어 넣어준다.
- letter번째 영문자를 사용했으므로, counts 내 개수를 차감해준다.
- 0부터 counts의 길이까지 idx를 증가시키며 아래를 반복하여 문자열을 완성한다.
- counts의 idx번째 문자의 개수가 0 초과일 때 까지 아래를 반복한다.
- index가 result의 길이를 초과하는 경우, 이미 들어간 문자 사이에 넣도록 index를 1로 초기화해준다.
- result의 index번째 위치에 idx를 영문자로 변환하여 넣어준다.
- index를 2씩 증가시켜 같은 문자가 붙지 않도록 띄어 넣어준다.
- idx번째 영문자를 사용했으므로, counts 내 개수를 차감해준다.
- counts의 idx번째 문자의 개수가 0 초과일 때 까지 아래를 반복한다.
- 반복이 완료되면 result를 문자열로 변환하여 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기