int min = Integer.MAX_VALUE;
for (int length = 1; length <= s.length(); length++) {
//문자열 압축 후 가장 짧은 길이 선택
}
return min;
private int compress(String source, int length) {
//압축한 문자열의 길이 반환
}
private List<String> split(String source, int length) {
List<String> tokens = new ArrayList<>();
// source를 length만큼씩 잘라 tokens 리스트에 추가
return tokens;
}
문자열을 자르는 시작 인덱스는 0부터 시작하여 length만큼씩 증가합니다. 따라서 다음 반복문으로 모든 startIndex를 순회할 수 있습니다.
이때 endIndex는 startIndex + length이지만, 이것이 문자열 범위 밖이라면 문자열의 끝까지 정상적으로 잘릴 수 있도록 다음과 같이 작성합니다.
for (int startIndex = 0; startIndex < source.length(); startIndex += length) {
int endIndex = startIndex + length;
if (endIndex > source.length()) endIndex = source.length();
tokens.add(source.substring(startIndex, endIndex));
}
연속으로 중복된 문자열을 검사해야 하므로 직전에 등장한 문자열을 담는 last 변수와 그 등장 횟수를 담는 count 변수를 선언합니다.
String last = "";
int count = 0;
for (String token : split(source, length)) {
}