python每日一练-合理有效的括号

我们还是先来看看今天的题目:
在这里插入图片描述
这道题我们最开始的想法就是进行判断,因为如果长度是奇数,那么可以直接判断false。然后就是一一进行删除,使用while循环,如果(){}【】存在于字符串中,则就删除。最后判断字符串是否长度为0,如果不是,那么返回false,如果是,则返回true。
上代码:

s = "{[]}"
if len(s)//2!=0:
    return False
while '()' in s or '[]' in s or '{}' in s:
    s=s.replace('()','')
    s=s.replace('[]','')
    s=s.replace('{}','')
if len(s)==0:
    return True
else:
    return False

这样我们就完成了对于该题的讲解,就是找到一个删除一个。
这里我们总结一下replace(),其实就是对字符串进行删除的一个操作,将字符串中的元素进行替换,替换为空就是删除了。
然后我们介绍一种新的方法,非常巧妙,就是栈的方法。
首先我们来了解一下pop()函数,pop()函数是按照索引删除元素,默认情况下,删除最后一个元素并且返回该值。
首先我们建立一个字典:{‘(’:‘)’,‘【’:‘】’,‘{’:‘}’,‘?’:‘?’}
然后循环字符s中的元素,如果字典中有则添加到栈【‘?’】中,如果没有则判断栈中最后一个元素和该元素不一致,则返回false。
最后return len(栈长)==1
其中【‘?’】 必须有,因为pop()如果没有元素会报错所以必须有?,上代码:

s = "{[]}"
if len(s)//2==0:
            return False
dict={
    
    '(':')','[':']','{':'}','?':'?'}
list=['?']
for i in s:
    if i in dict:
        list.append(i)
    elif dict[list.pop()]!=c:
        return False
return len(list)==1

两种方法,选择一个即可。

青出于蓝而胜于蓝!

猜你喜欢

转载自blog.csdn.net/m0_37623374/article/details/124732560