【python】消除字符串的内嵌括号?

作者: 阿牛02 | 来源:发表于2019-07-25 11:41 被阅读0次

    题目:给定一个如下格式的字符串:(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)

    相关文章

      网友评论

        本文标题:【python】消除字符串的内嵌括号?

        本文链接:https://www.haomeiwen.com/subject/fczxrctx.html