20. Valid Parentheses

Given a string containing just the characters '('')''{''}''[' and ']', determine if the input string is valid.

The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

这个题就是判断符号是否匹配,这是在王道里面经典的一道用栈实现的题

class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """     
        sl=list()
        l=len(s)
        if(l==0):
             return True
        i=0
        while(i<l):
            sl.append(s[i])   
            while(len(sl)>=2):               
                if(ord(sl[-1])-1==ord(sl[-2])or(ord(sl[-1])-2==ord(sl[-2]))):                    
                    sl.pop()
                    sl.pop()                    
                else:
                    break
            i=i+1        
        if(len(sl)==0):
            return True
        else:
            return False
      

挺简单的一道题,python里面可以用list()来实现栈,append是进栈,pop是出栈

用了两层循环,但是时间复杂度O(n)+O(n/2),外层循环执行了n次,但是内层循环一共就是把所有的括号出栈,而且一次出去两个, 所以是n/2次

最后的复杂度约等于O(n),所以还是挺快的。

外层循环是从头到尾执行一遍,内层循环是检查最后两个是不是匹配,如果匹配就出栈。python不像C++那样对于字符可以加一减一,Python需要用ord把数字(ASCII)转换成字符,用chr把字符转换成字符。

还有一个坑是我还以为所有的括号都是在ASCII上差一个,最后输出才知道,()是差一个,[]与{}都是差两个


不懂这个运行时间,代码一样,但是运行时间不一样,不知道是不是和网速有关,我还判断了如果长度是奇数的话直接返回false,但是速度变慢了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值