Find k-th character of decrypted string - Set – 2 in Python


Suppose we have one encoded string where repetitions of substrings are represented as substring followed by count of substrings. As an example, if the string is "pq2rs2" and k=5, so output will be 'r', this is because the decrypted string is "pqpqrsrs" and 5th character is 'r'. We have to keep in mind that the frequency of encrypted substring can be of more than one digit.

So, if the input is like string = "pq4r2ts3" and k = 11, then the output will be i, as the string is pqpqpqpqrrtststs

To solve this, we will follow these steps −

  • encoded := blank string

  • occurrence := 0, i := 0

  • while i < size of str, do

    • temp := blank string

    • occurrence := 0

  • while i < size of str and str[i] is an alphabet, do

    • temp := temp + str[i]

    • i := i + 1

  • while i < size of str and str[i] is a digit, do

    • occurrence := occurrence * 10 + ASCII of (str[i]) - ASCII of ('0')

    • i := i + 1

  • for j in range 1 to occurrence + 1, increase by 1, do

    • encoded := encoded + temp

  • if occurrence is same as 0, then

    • encoded := encoded + temp

  • return encoded[k - 1]

Example

Let us see the following implementation to get better understanding −

 Live Demo

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))

Input

"pq4r2ts3", 11

Output

t

Updated on: 25-Aug-2020

360 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements