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

Python의 인덱스에서 디코딩된 문자열

<시간/>

하나의 인코딩된 문자열 S가 제공된다고 가정합니다. 디코딩된 문자열을 찾아서 테이프에 기록해야 합니다. 여기서 인코딩된 문자열은 한 번에 한 문자씩 읽고 다음 단계가 수행됩니다. -

  • 읽은 문자가 문자인 경우 해당 문자는 테이프에 간단히 기록됩니다.
  • 읽은 문자가 숫자인 경우 현재 테이프 전체에 반복적으로 숫자가 기록됩니다. 총 1번 더 추가됩니다.

이제 일부 인코딩된 문자열 S와 인덱스 K가 제공되면 디코딩된 문자열에서 K 번째 문자(1부터 시작하는 인덱스)를 찾아 반환합니다.

따라서 문자열이 "hello2World3"이고 k =10이면 출력은 "o"가 됩니다. 디코딩된 문자열은 "hellohelloWorldhellohelloWorldhellohelloWorld"이므로 10번째 문자가 "o"이기 때문입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 크기 :=0
  • 문자열 s의 i에 대해
    • i가 숫자이면 size :=size * i의 정수, 그렇지 않으면 size :=size + 1
  • i의 경우 길이가 s – 1에서 0까지
    • k :=k 모드 크기
    • s[i]가 숫자이고 k =0이면 s[i]를 반환합니다.
    • s[i]가 숫자이면 크기를 1로 줄이고 그렇지 않으면 size :=크기 / s[i]의 정수
  • 빈 문자열 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

class Solution(object):
   def decodeAtIndex(self, s, k):
      """
      :type S: str
      :type K: int
      :rtype: str
      """
      size = 0
      for i in s:
         if i.isdigit():
            size *= int(i)
         else:
            size += 1
      #print(size)
      for i in range(len(s) - 1, -1, -1):
         k %= size
         if s[i].isalpha() and k == 0:
            return s[i]
         if s[i].isalpha():
            size -=1
         else:
            size /= int(s[i])
      return ""
ob = Solution()
print(ob.decodeAtIndex("hello2World3", 10))

입력

"hello2World3"
10
ob.decodeAtIndex("hello2World3", 10)

출력

o