题目:
学习来自 -- 各位大佬
思路一:
利用栈的思想,合适的括号对储存为字典,利用下一个元素 == 栈弹出的元素 比较, 有点慢
代码一:
class Solution:
def isValid(self, s):
stack = []
dict1 = {"(":")", "{":"}", "[":"]"}
for elem in s:
if elem in dict1.keys():
stack.append(elem)
elif elem in dict1.values():
if stack == [] or dict1[stack.pop()] != elem:
return False
return stack == []
思路二:
有点取巧了, 很牛逼,正确的括号对,可能可以去除 "()", "{}", "[]" ,replace --> "" 空 , 从里面到外层进行替换,
但是提交后有点慢?? 用IDE 对比了一下,奇怪了
代码二:
class Solution2:
def isValid(self, s):
while '{}' in s or '()' in s or '[]' in s:
s = s.replace('{}', '')
s = s.replace('[]', '')
s = s.replace('()', '')
return s == ''
思路三,原理基本与1相同,但是慢很多
class Empty(Exception):
pass
class ArrayStack:
def __init__(self):
self._data = []
def len(self):
return len(self._data)
def is_empty(self):
return len(self._data) == 0
def push(self, item):
return self._data.append(item)
def top(self):
if self.is_empty():
raise Empty("Stack is empty")
return self._data[-1]
def pop(self):
if self.is_empty():
raise Empty("Stack is empty")
return self._data.pop()
class Solution3:
def isValid(self, s):
lefty = "({["
righty = ")}]"
S = ArrayStack()
for c in s:
if c in lefty:
S.push(c)
elif c in righty:
if S.is_empty():
return False
if righty.index(c) != lefty.index(S.pop()):
return False
return S.is_empty()
IDE 结果:
第一个程序运行时间: 9.5367431640625e-07
第二个程序运行时间: 2.2172927856445312e-05
第三个程序运行时间: 8.821487426757812e-06
三个程序,最短时间 = 9.5367431640625e-07