하나의 인코딩된 문자열 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