第一种:
# 利用栈的特点,先进后出,左符号添加,用右符号找左符号删除,
# 左加右减,有右无左,为无效 原则
# 判断右符号找不到左符号说明 没有配对的 返回False
class Solution:
def isValid(self, s):
stack = []
dict = {"]": "[", "}": "{", ")": "("}
for item in s:
if item in dict.values():
stack.append(item)
elif item in dict.keys():
if stack == [] or dict[item] != stack.pop() :
return False
else:
if item != ' ':
return False
return stack == []
# s = '(( )[]){}'
# s = '(][)'
# s = '['
s = ' '
sol = Solution()
print(sol.isValid(s))
第二种:
# 这种方法不建议使用,特别是符号嵌套复杂的情况,但是这种想法很秒
有点像消消乐 ,有就消除,不断循环直至没有,如果剩下的就是不符合条件的
class Solution:
def isValid(self, s):
s.replace(' ','')
while '()' in s or '[]' in s or '{}' in s:
s = s.replace('{}', '')
s = s.replace('[]', '')
s = s.replace('()', '')
return s == ''
# s = '(( )[]){}'
# s = '(][)'
# s = '['
s = ' '
sol = Solution()
print(sol.isValid(s))