刷Leetcode算法的第二天

今天是刷LT的第二天,好好干饭,好好努力,好好加油哦!

leetcode题目3
检查是否所有括号都已配对。即是否刚好完全配对好

  1. 左括号必须用相同类型的右括号闭合
  2. 左括号必须以正确的顺序闭合

例子如下:

输入:s = "([)]"
输出:false
输入:s = "()[]{}"
输出:true

首先将所有的括号符号列出来,作为一个配对
dic = {’{’: ‘}’, ‘[’:’]’, ‘(’:’)’,’?’:’?’}
要检查是否所有的括号都配对好
首先是先把开始出现的符号 收集在在一个列表
如果出现了配对的符号,则pop出去那个符号。
一直这样做下去,直到最后,如果列表剩下问号
则表示刚刚好完全配对。
如果还有剩的符号,则表示没有完全配对。

首先要理解pop函数的用法
pop() 函数用于移除列表中的一个元素(默认最后一个元素)
并且返回该元素的值。

test = ['Google', 'Runoob', 'Taobao']
list_pop=test.pop()
print( "删除的项为 :", list_pop)
print( "列表现在为 : ", test)
输出为:
删除的项为 : Taobao
列表现在为 :  ['Google', 'Runoob']

也可以指定pop走哪一个

test = ['Google','Runoob','Taobao']
list_pop=test.pop(1)
print( "删除的项为 :", list_pop)
print( "列表现在为 : ", test)
输出为:
删除的项为 : Runoob
列表现在为 :  ['Google', 'Taobao']

所以现在利用pop函数,如果匹配的话就pop出去元素

def isValid(s: str) -> bool:
‘’‘
s是需要检查的字符
返回是否配对成功
’‘’
    dic = {
    
    '{': '}', '[':']', '(':')','?':'?'}   #列出所有的括号配对
    stack = ['?']                                #列表中有问号
    for c in s:                                  #对于字符s里 每个符号          
        if c in dic: 
        #如果在dic字典里的前面,即keys:'{','[','(','?',则录入stack里                         
            stack.append(c)
        elif dic[stack.pop()]!=c:               
        #否则就是dic的values,即'}', ']',  ')','?'
        #这个时候,就要pop出相对应的keys 即 dic[stack.pop()],顺序也很重要
            return False 
    return len(stack) == 1                        #最后只剩问号

猜你喜欢

转载自blog.csdn.net/Jiana_Feng/article/details/114698843