Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 n(t) 형식으로 표시되는 문자열을 확장하는 프로그램

<시간/>

문자열 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