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,但是速度变慢了。