def duplicate_string(string):
"""
回溯法求解
"""
if not string:
return ''
def backtrack(pre_ind=0, n=1, s=''):
while pre_ind < len(string):
if string[pre_ind] == ']':
s = s * n
if len(stack) >= 1:
stack.pop()
else:
raise Exception('lack right pairs []')
return pre_ind, s
if 0 <= ord(string[pre_ind]) - ord('0') <= 9:
stack.append('[')
pre_ind, sub_s = backtrack(pre_ind + 2, int(string[pre_ind]))
s += sub_s
else:
s += string[pre_ind]
pre_ind += 1
if len(stack) >= 1:
raise Exception('lack right pairs []')
return s
stack = []
return backtrack()
if __name__ == '__main__':
'''
2[d] --> dd
p2[d]a --> pdda
3[p2[d]]a --> pddpddpdda
'''
input1 = '2[d]'
input2 = 'p2[d]a'
input3 = '3[p2[d]]a'
res = duplicate_string(input3)
print(res)