题目:
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
思路:
用栈的思想,用字典形式把左右符号一一对应起来,遍历字符串,如果是左符号就入栈,如果是右符号就判断栈顶是否对应的左符号,如果是,栈顶出栈,如果不是则直接返回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==''

本文介绍了一种使用栈数据结构来判断字符串中括号是否有效配对的方法。通过定义一个包含对应括号对的字典,遍历字符串,利用栈记录左括号,当遇到右括号时检查栈顶是否为其配对的左括号。最终,若栈为空则说明所有括号都已正确闭合。
270

被折叠的 条评论
为什么被折叠?



