Leetcode Java Decode String
업데이트:
문제
코드
class Solution {
private int index = 0;
public String decodeString(String s) {
StringBuilder result = new StringBuilder();
while (index < s.length() && s.charAt(index) != ']') {
if (Character.isDigit(s.charAt(index))) {
int repeat = 0;
while (Character.isDigit(s.charAt(index))) {
repeat = (repeat * 10) + (s.charAt(index++) - '0');
}
index++;
String word = this.decodeString(s);
for (int idx = 0; idx < repeat; idx++) {
result.append(word);
}
index++;
} else {
result.append(s.charAt(index++));
}
}
return result.toString();
}
}
결과
설명
- 주어진 문자열 s를 이용하여 아래의 규칙대로 수행한 결과를 반환하는 문제이다.
- k[encoded_string]로 표기된 문자열은 encoded_string을 k번 반복하면 된다.
- encoded_string 내 k[encoded_string]로 표기된 문자열은 안쪽부터 먼저 변환 후 바깥쪽에서 변환한다.
- index는 주어진 문자열의 위치를 나타내며, 0으로 초기화한다.
- decodeString(String s)를 재귀 호출하여 전역 변수를 정의한다.
- result는 결과를 저장할 StringBuilder 객체이다.
- 동적 문자열의 생성시, 효율적인 메모리 사용을 위해 StringBuilder를 사용한다.
- index가 s의 길이보다 작고, index번째 문자가 ‘]’가 아닐 때 까지 반복을 수행한다.
- s의 index번째 문자가 숫자인 경우, 아래를 수행한다.
- 반복 횟수를 넣을 repeat를 0으로 초기화하고, 숫자인 값을 repeat에 넣어준다.
- 숫자를 넣은 다음 값은 ‘[’ 문자이므로, index를 증가시킨다.
- word는 재귀 호출을 이용하여 다음 ‘]’문자까지 값을 받아 초기화한다.
- 0부터 repeat 전까지 반복하여 result에 word를 repeat번 넣어준다.
- 값을 다 넣은 다음 값은 ‘]’이므로, index를 증가시킨다.
- s의 index번째 문자가 숫자가 아닌 경우 단순 문자열이므로, result에 s의 index번째 문자를 넣고 index를 증가시킨다.
- s의 index번째 문자가 숫자인 경우, 아래를 수행한다.
- 반복이 완료되면 result를 문자열로 변환시켜 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기