# -*- coding: utf-8 -*-
'''
Python程序员面试算法宝典---解题总结: 第5章 字符串 5.7 如何消除字符串内的内嵌括号
题目:
给定一个如下格式的字符串:
(1,(2,3),(4,(5,6),7))
括号内的元素可以是数字,也可以是另一个括号,实现一个
算法消除嵌套的括号,例如把上面的表达式变成
(1,2,3,4,5,6,7),
如果表达式有误,那么报错
分析:
关键:
1 解法
设置一个变量count,当遇到(加一,当遇到)减一,
用一个字符串保存除了括号之外的所有字符
最后添加上最外侧的()括号即可
参考:
Python程序员面试算法宝典
'''
def removeBracket(string):
if not string:
return False, None
count = 0
charList = []
size = len(string)
numSet = set([str(i) for i in range(0, 10)])
for i in range(size):
if '(' == string[i]:
count += 1
elif ')' == string[i]:
count -= 1
elif ',' == string[i] or string[i] in numSet:
charList.append(string[i])
else:
return False, None
if count != 0:
return False, None
result = '({value})'.format(
value="".join(charList)
)
return True, result
def process():
string = '(1,(2,3),(4,(5,6),7))'
flag, value = removeBracket(string)
if flag:
print "表达式正确,值为: {value}".format(
value=value
)
else:
print "表达式错误"
string = '(1,(2,3),(4,(5,6,7))'
flag, value = removeBracket(string)
if flag:
print "表达式正确,值为: {value}".format(
value=value
)
else:
print "表达式错误"
if __name__ == "__main__":
process()