문자열 s가 있다고 가정하고 이것은 더 긴 문자열을 인코딩합니다. s는 n(t)의 연결로 표시되고, n(t)는 t, n번의 연결을 나타내며, t는 일반 문자열이거나 재귀적으로 다른 인코딩된 문자열입니다. s의 디코딩된 버전을 찾아야 합니다.
따라서 입력이 s ="3(pi)2(3(am))0(f)1(u)"와 같으면 출력은 "pipipiamamamamamamu"가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
나는 :=0
-
parse() 함수를 정의합니다. 시간이 걸립니다
-
ans :=새 목록
-
i
-
s[i]가 숫자이면
-
d :=0
-
s[i]가 숫자인 동안 수행
-
d :=10 * d + s[i]의 정수 부분
-
나는 :=나는 + 1
-
-
나는 :=나는 + 1
-
세그먼트 :=parse()
-
나는 :=나는 + 1
-
세그먼트를 ans에 d번 삽입
-
-
그렇지 않으면
-
ans의 끝에 s[i] 삽입
-
나는 :=나는 + 1
-
-
-
ans
의 항목을 결합한 후 문자열을 반환합니다. -
기본 메서드에서 parse()
를 반환합니다.
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
class Solution: def solve(self, s): i = 0 def parse(): nonlocal i ans = [] while i < len(s) and s[i] != ")": if s[i].isdigit(): d = 0 while s[i].isdigit(): d = 10 * d + int(s[i]) i += 1 i += 1 segment = parse() i += 1 ans.extend(segment for _ in range(d)) else: ans.append(s[i]) i += 1 return "".join(ans) return parse() ob = Solution() s = "3(pi)2(3(am))0(f)1(u)" print(ob.solve(s))
입력
"3(pi)2(3(am))0(f)1(u)"
출력
pipipiamamamamamamu