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

해독된 문자열의 k번째 문자 찾기 - Python에서 Set – 2


하위 문자열의 반복이 하위 문자열 다음에 하위 문자열 개수로 표시되는 인코딩된 문자열이 하나 있다고 가정합니다. 예를 들어 문자열이 "pq2rs2"이고 k=5이면 출력은 'r'이 되는데, 이는 복호화된 문자열이 "pqpqrsrs"이고 5번째 문자가 'r'이기 때문입니다. 암호화된 하위 문자열의 빈도는 한 자리 이상일 수 있음을 명심해야 합니다.

따라서 입력이 string ="pq4r2ts3" 및 k =11과 같으면 문자열이 pqpqpqpqrrtststs이므로 출력은 i가 됩니다.

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

  • 인코딩된 :=빈 문자열

  • 발생 :=0, 나는 :=0

  • 동안 나는

    • temp :=빈 문자열

    • 발생 :=0

  • i

    • temp :=temp + str[i]

    • 나는 :=나는 + 1

  • i

    • 발생 :=발생 * 10 + (str[i])의 ASCII - ('0')의 ASCII

    • 나는 :=나는 + 1

  • 범위 1에서 발생 + 1까지의 j에 대해 1씩 증가, 수행

    • 인코딩된 :=인코딩된 + 임시

  • 발생이 0과 같으면

    • 인코딩된 :=인코딩된 + 임시

  • 인코딩된 반환[k - 1]

예시

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

def find_kth_char(str, k):
   encoded = ""
   occurrence = 0
   i = 0
   while i < len(str):
      temp = ""
      occurrence = 0
      while (i < len(str) and ord(str[i]) >= ord('a') and ord(str[i]) <= ord('z')):
         temp += str[i]
         i += 1
      while (i < len(str) and ord(str[i]) >= ord('1') and ord(str[i]) <= ord('9')):
         occurrence = occurrence * 10 + ord(str[i]) - ord('0')
         i += 1
      for j in range(1, occurrence + 1, 1):
         encoded += temp
   if occurrence == 0:
      encoded += temp
   return encoded[k - 1]

str = "pq4r2ts3"
k = 11
print(find_kth_char(str, k))

입력

"pq4r2ts3", 11

출력

t