【python程序员面试宝典|程序员算法宝典】

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

2019-07-25  本文已影响0人  阿牛02

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

上一篇下一篇

猜你喜欢

热点阅读