从字符串中删除嵌套括号,消除,的

发表时间:2020-05-20

本来今天打算发两篇的,结果有一篇怎么也通不过,不是文章通不过,可能是我理解的还很肤浅,且待明日再集中解决.(另外明天再发表一篇类似的),这样的任务简单,程序简短的,有时真的不一定能转的过弯来,所以在我写博客的同时也是对自己的检验,这是好事

这个问题比较简单,它的问题是:给定一个如下格式的字符串(1,(2,3,4),(5,6),7),括号内的元素随意,设计一个算法,消除除最外面括号的其他内嵌括号,例如把上面的字符串转换成(1,2,3,4,5,6,7),如果这个字符串的格式有误(这里的有误,指的是括号的对应有问题,比如只有半个括号或者先出现右半边括号这种明显反常的结构),那么报错.

判断括号是否匹配,只要设计一个计数变量Num,如果出现左括号"(“就增1,如果出现右括号”)“就减1,但是最外面的两个括号不能被删除.为此,我们只要遍历第1到第size-2位置的字符,观察是否有括号的对应情况.这里我注意到书中忽略了一个情况,就是可能先有右括号再有左括号的情况,如果先出现一次左括号,再出现一次右括号,Num变量为0,但如果先出现一次右括号,在出现一次左括号,虽然Num结果也是0,但是却是反常的情况,像这种情况我们应该考虑并规避它.另外,直接删除”(“或”)“会导致每次遍历时数组的长度减小,如果不更新此时的数组长度,很容易出现下标越界的情况,所以不建议采取数组删除操作,力求保证遍历的数组(由字符串转换一下即可)长度不变,可以省去一些不必要的麻烦.采取选择法,遇到”(“或”)",不操作,遇到其他字符将他们一个个地写入新字符串new_str中,最后判断格式是否正确即可.
下面的代码仅作为参考,具体的细节方面大家可以根据自己的喜好修改:

# 如何消除字符串里面的嵌套括号
def eliminateNestedParentheses(strs):
    if strs == None:
        return
    strs = list(strs)
    size = len(strs)
    new_strs = ""
    i = 0
    if strs[i] != "(":
        print("这个字符串的格式有问题")
        return
    i += 1
    num = 0
    while i < size - 1:
        if strs[i] == "(":
            num += 1
        elif strs[i] == ")" and num > 0:
            num -= 1
        elif strs[i] == ")" and num <= 0:
            print("这个字符串的格式有问题")
            return
        else:
            new_strs += strs[i]
        i += 1
    if num == 0 and strs[i] == ")":
        print("这个字符串的格式没有问题,去掉嵌套括号以后的字符串为:"+ "(" + "".join(new_strs) + ")")
        return
    print("这个字符串的格式有问题")

if __name__ == "__main__":
    strs = "(1,(2,3),(4,5,6),7)"
    eliminateNestedParentheses(strs)

上述的结果显示为:
在这里插入图片描述
再取几个其他的字符串,看它的判断结果:

if __name__ == "__main__":
    strs = "((1,))2,),())"
    eliminateNestedParentheses(strs)

在这里插入图片描述

if __name__ == "__main__":
    strs = "(1, 2, (2, 3(4,5)))"
    eliminateNestedParentheses(strs)

在这里插入图片描述 以上.
在这里插入图片描述

微配音

文章来源互联网,尊重作者原创,如有侵权,请联系管理员删除。邮箱:417803890@qq.com / QQ:417803890


Python Free

邮箱:417803890@qq.com
QQ:417803890

皖ICP备19001818号
© 2019 copyright www.pythonf.cn - All rights reserved

微信扫一扫关注公众号:

联系方式

Python Free