题目:给定一个如下格式的字符串:(1,(2, 3),(4,(5,6),7)),括号内的元素可以是数字,也可以是另外一个括号,实现一个算法消除嵌套的括号,例如把上面的表达式变成(1, 2, 3,4 , 5, 6, 7),如果表达式有误,那么报错。
分析:该道题需要:一个是判断表达式是否正确,另一个是消除表达式中嵌套的括号。对于判定表达式是否正确这个问题,:首先表达式中只有数字,逗号和括号这几种字符,如果有其它的字符出现,那么是非法表达式。其次,判断括号是否匹配,如果碰到“(”,那么把括号的计算器的值加上1;如果碰到“)”,判断此时计算器的值,如果计数器的值大于1,那么计数器的值减去1,否则位非法表达式,当遍历完表达式后,括号计算器的值位0,则说明括号是配对出现的,否则括号不配对,表达式位非法表达式。对于首尾的括号需要保存。
code:
def removeNestedPare(strs):
if strs is None:
print("参数不合法")
return
lists = list(strs)
num = 0
if list(strs)[0] != "(" or list(strs)[-1] != ')':
return None
sb = '('
i = 1
while i < len(strs) - 1:
if lists[i] == "(":
num += 1
elif lists[i] == ")":
num -= 1
else:
sb += lists[i]
i += 1
if num != 0:
print("括号不匹配")
return None
else:
sb += ")"
return sb
if __name__ == "__main__":
strs = "(1, (2, 3), (4, (5, 6), 7))"
print(strs+ "去除括号后为" + removeNestedPare(strs))
程序运行结果:
(1, (2, 3), (4, (5, 6), 7))去除括号后为(1, 2, 3, 4, 5, 6, 7)
网友评论