【题目描述】
给定一个字符串,字符串可以包含数字、大小写字母及括号(包括大括号、中括号和小括号)。括号
可以嵌套,即括号中可以出现数字和括号。按照下列的规则对字符串进行展开,不用考虑括号成对不
匹配的问题,用例保证括号匹配,同时保证每个数字后面都有括号,不用考虑数字后面没有括号的情
况:即2a2(b)。
输出最终的字符串
【输入描述】
输入一个长度小于100的字符串。
【输出描述】
输出展开后的字符串。
【测试用例】
【输入】
abc3(A)
【输出】
AAAcba
【解题思路】
采用栈的思想。
def printString(strings):
stack = []
for s in strings:
if s.isalpha():
stack.append(s)
elif s.isdigit():
stack.append(s)
elif s == '{' or s == '[' or s == '(':
stack.append(s)
else: # 如果遇到右括号,则出栈到第一个左括号
temp = []
# 取出括号中的内容
while stack[-1] != '{' and stack[-1] != '[' and stack[-1] != '(':
temp.insert(0, stack.pop(-1))
# 弹出遇到的第一个左括号
stack.pop(-1)
# 取出左括号前的数字,数字可能不只有一位:
num = []
count = 0
while stack[-1].isdigit():
num.insert(0, stack.pop(-1))
# 计算需要重复的次数
for i in range(len(num)):
count = count * 10 + int(num[i])
# 重复括号中的字符串
temp = temp * count
# 将重复好的字符串再压入栈中
for t in temp:
stack.append(t)
# 出栈
while stack:
print(stack.pop(-1), end='')
print('')
if __name__ == '__main__':
strings = 'abc2[A3(B)]'
printString(strings)