查找解密字符串的第k个字符-Set – 2 in Python

假设我们有一个编码字符串,其中子字符串的重复表示为子字符串,后跟子字符串的计数。例如,如果字符串为“ pq2rs2”且k = 5,则输出为“ r”,这是因为解密后的字符串为“ pqpqrsrs”,而第5个字符为“ r”。我们必须记住,加密子字符串的频率可以超过一位数。

因此,如果输入类似于string =“ pq4r2ts3”且k = 11,则输出将为i,因为字符串为pqpqpqpqrrtststs

为了解决这个问题,我们将遵循以下步骤-

  • 编码:=空字符串

  • 出现:= 0,i:= 0

  • 当我<str的大小时

    • temp:=空字符串

    • 发生:= 0

  • 虽然我<str的大小,并且str [i]是一个字母,但是

    • temp:= temp + str [i]

    • 我:=我+ 1

  • 当i <str的大小并且str [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
猜你喜欢