Python 中解密字符串的第 k 个字符 - 集 - 2


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

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

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

  • encoded := 空字符串

  • occurrence := 0, i := 0

  • 当 i < str 的大小 时,执行

    • temp := 空字符串

    • occurrence := 0

  • 当 i < str 的大小 且 str[i] 是字母时,执行

    • temp := temp + str[i]

    • i := i + 1

  • 当 i < str 的大小 且 str[i] 是数字时,执行

    • occurrence := occurrence * 10 + str[i] 的 ASCII 码 - '0' 的 ASCII 码

    • i := i + 1

  • 对于 j 从 1 到 occurrence + 1,递增 1,执行

    • encoded := encoded + temp

  • 如果 occurrence 等于 0,则

    • encoded := encoded + temp

  • 返回 encoded[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

更新于: 2020-08-25

390 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告