思路
因为这个字符串可以被多层压缩,所以我们要找到最里层的中括号。刚开始的思路是利用栈,从前往后找,遇到'['
的时候,将元素入栈,遇到']'
的时候,让元素出栈,计算出解压后的字符串,然后继续往后遍历,一直到栈为空。但是编码的过程中发现这种办法太过复杂。
后来发现,只要从后往前遍历,找到的第一个'['
就是最里层的,然后从这个'['
的位置往后找,就能找到这个'['
对应的']'
,然后我们吧这段内容替换为解压后的字符串,接着往前查找。一直到找不到'['
为止。
代码
s = input()
i = len(s)
while True:
i = s.rfind("[", 0, i)
if i < 0:
break
j = s.find("|", i + 1)
k = s.find("]", j + 1)
# 找到数字
n = int(s[i + 1:j])
# 找到字串
ss = s[j + 1:k]
# 拼接
s = s[:i] + n * ss + s[k + 1:]
print(s)
标签:最里层,找到,ss,字符串,压缩算法,find
From: https://www.cnblogs.com/mengzhuo/p/17625325.html