一尘不染

Python程序检查简单括号的匹配

algorithm

我是一名Python新手,我遇到了检查给定字符串中的简单括号“(”,“)”是否均匀匹配的练习。

我在这里看到了使用尚未遇到的stack命令的示例,因此我尝试了另一种方法。谁能告诉我我要去哪里错了?

def matched(str):
    ope = []
    clo = []
    for i in range(0,len(str)):
        l = str[i]
        if l == "(":
            ope = ope + ["("]
        else:
            if l == ")":
                clo = clo  + [")"]
            else:
                return(ope, clo)
    if len(ope)==len(clo):
        return True
    else:
        return False

想法是将“(”和“)”堆积成两个单独的列表,然后比较列表的长度。我还有另一个版本,在该版本中我将ope和clo列表附加了分别包含(或)的相关i。

谢谢你的时间!


阅读 371

收藏
2020-07-28

共1个答案

一尘不染

下面是执行此操作的一种非常优雅的方法。它清除for循环,并用简单的计数器变量替换列表。如果计数器降到零以下,它也会返回false,以便matched(")(")返回False

def matched(str):
    count = 0
    for i in str:
        if i == "(":
            count += 1
        elif i == ")":
            count -= 1
        if count < 0:
            return False
    return count == 0
2020-07-28