题目:
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
思路:
用栈的思想,用字典形式把左右符号一一对应起来,遍历字符串,如果是左符号就入栈,如果是右符号就判断栈顶是否对应的左符号,如果是,栈顶出栈,如果不是则直接返回false,当然如果一开始就是右符号就直接返回false。遍历完之后看栈内是否还有元素,没有则为true,有则为false。
题解:
class Solution:
def isValid(self,s: str)-> bool:
stack = []
p_dict = {'(':')','[':']','{':'}'}
left = p_dict.keys()
right = p_dict.values()
#print(left,right)
for i in s:
#如果是左符号压入栈
if i in left:
#print('1111')
stack.append(i)
#如果是右符号,则判断是否栈顶为对应的左符号
if i in right:
#print('2222')
if stack:
if p_dict[stack[-1]] == i:
#print(i)
stack.pop()
else:
return False
else:
return False
return len(stack) == 0
其他:
看到一个题解更为巧妙,不过耗时多了20ms
class Solution:
def isValid(self,s: str) -> bool:
while '()' in s or '[]' in s or '{}' in s:
s = s.replace('()','')
s = s.replace('{}','')
s = s.replace('[]','')
return s==''