Pythonプログラマのインタビューブック---問題解決のアルゴリズムの概要:かっこ内に埋め込まれた5.7第5章文字列を排除する方法

# -*- 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()

 

おすすめ

転載: blog.csdn.net/qingyuanluofeng/article/details/94328484