LeetCode有效的括号
题目描述:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
思路分析
这道题是数据结构中讲栈时的经典案例啦。所以也不用想太多啦,就是套路,用栈即可!
具体操作就是遍历给定的括号串,逐一放入栈,如果放入的是“右括号,如},],)”就在放入栈的同时检查此时放入的元素和栈顶元素是否配对:如果配对,则将这一对从栈中去除;如果不配对,说明出现了例3的情况,不合法直接返回False。值得注意的是,如果整个括号串只有一个’]’,该右括号也不能找到与它匹配的左括号,也返回False。
若没有返回False,一直遍历至括号串最后,如果栈为空了,证明所有括号都配对成功被去除了,则最终合法,返回Ture;若最后不为空(如剩下个‘{’),则不合法,返回False
代码:
class Solution(object):
def isValid(self, s):
stack =[]#定义一个栈
for ss in s:#遍历括号串
if ss=='(' or ss=='[' or ss=='{':
stack.append(ss)#如果是右括号就放进栈
elif ss==')':#如果是左括号,就要看一下是否有对应匹配
if stack and stack[-1]=='(':#匹配的话,就除去这一对括号
stack.pop(-1)
else:
return False #一旦不匹配,直接False
elif ss==']':
if stack and stack[-1]=='[':
stack.pop(-1)
else:
return False
elif ss=='}':
if stack and stack[-1]=='{':
stack.pop(-1)
else:
return False
if len(stack)==0:#遍历到最后,看看栈是否为空了
return True#为空则说明合法,全都配对完了
return False #其他情况就是不合法。
这道题是难度简单+栈入门必做题~