假设给出一个编码字符串S。我们必须找到解码后的字符串并将其写入磁带,这里一次读取一个字符的编码后的字符串,然后执行以下步骤:
如果读取的字符是字母,则只需将该字母写到磁带上。
如果读取的字符是数字,则将整个当前磁带重复写入数字-总共再写入1次。
现在,如果给出了一些编码后的字符串S并给出了索引K,则在解码后的字符串中找到并返回第K个字母(从1开始的索引)。
因此,如果字符串为“ hello2World3”且k = 10,则输出将为“ o”。这是因为解码后的字符串将为“ hellohelloWorldhellohelloWorldhellohelloWorld”,因此第十个字符为“ o”。
为了解决这个问题,我们将遵循以下步骤-
大小:= 0
为我在字符串s
如果i是数字字符,则size:= size * i的整数,否则size:= size + 1
对于i,其范围为s – 1到0
k:= k mod大小
如果s [i]是数字且k = 0,则返回s [i]
如果s [i]是数字,则将size减小1,否则size:= size / s [i]的整数
返回空字符串
让我们看下面的实现以更好地理解-
class Solution(object):
def decodeAtIndex(self, s, k):
"""
:type S: str
:type K: int
:rtype: str
"""
size = 0
for i in s:
if i.isdigit():
size *= int(i)
else:
size += 1
#print(size)
for i in range(len(s) - 1, -1, -1):
k %= size
if s[i].isalpha() and k == 0:
return s[i]
if s[i].isalpha():
size -=1
else:
size /= int(s[i])
return ""
ob = Solution()print(ob.decodeAtIndex("hello2World3", 10))"hello2World3"
10
ob.decodeAtIndex("hello2World3", 10)输出结果
o