利用栈(可以包含不同种类型的括号)
遍历所有括号,如果遇到左括号就入栈,如果遇到右括号,将其与栈顶元素比较,查看是否匹配。如果匹配,栈顶元素出栈,如果不匹配,返回不合法。遍历完成后,如果栈为空,返回合法,如果栈不为空,返回不合法。
def isValid(s):
stack = []
start = ['(', '{', '[']
MAP = {')':'(', '}':'{', ']':'['}
for v in s:
if v in start:
stack.append(v)
else:
if stack == []:
return False
if MAP[v] == stack[-1]:
stack.pop()
else:
return False
if len(stack) == 0:
return True
else:
return False
利用左括号数目减去右括号数目(只能判断同种类型的括号)
遍历所有括号,比较左右括号的数目,若左括号数目少于右括号数目,提前结束遍历,并返回不合法,遍历结束后,若左右括号数目相等,则返回合法,否则不合法.
def isValid(s):
bal = 0
for c in s:
if c == '(':
bal += 1
else:
bal -= 1
if bal < 0:
return False
return bal == 0