- 有效的括号 难度(简单)
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([)]”
输出:false
示例 5:
输入:s = “{[]}”
输出:true
题解:算法流程
如果 是左括号,则入栈 否则判断和若stack 栈顶元素是否匹配,不匹配则提前返回 false。否则继续对比,知道最后栈为空且字符串对比完为True
class Solution:
def isValid(self, s: str) -> bool:
if len(s) %2!=0:
return False
stack=[]
for i in s:
if i in '([{' :
stack.append(i)
else:
if stack:
temp = stack.pop()
else:
return False
if temp == '(' and i!=')':
return False
elif temp == '[' and i!=']':
return False
elif temp == '{' and i!='}':
return False
return False if stack else True
简洁写法
class Solution:
def isValid(self, s: str) -> bool:
if len(s) %2!=0:
return False
dic={'(':')','{':'}','[':']'}
stack=[]
for i in s:
if i in dic:
stack.append(i)
else:
if not stack or i!=dic[stack.pop()]:
return False
return len(stack)==0
时间复杂度和空间复杂度都是0(N)