假设我们有一个编码字符串,其中子字符串的重复表示为子字符串,后跟子字符串的计数。例如,如果字符串为“ 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