描述:
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
关键:栈->先入后出的特点
1、使用栈,遍历字符串
2、如果字符是左半边,压入栈里
3、如果遇到右半边的时候,分类讨论:
1】如果栈不为空且有对应的左括号,则取出栈顶元素,继续循环。
2】栈已经空了,但是还剩于右括号多余,返回FALSE
3】若不为对应的左半边括号,则返回fasle
TIP:字符串长度为奇数。直接返回FALSE
总共分为这三种情况
class Solution:
def isValid(self, s: str) -> bool:
if len(s) &2 == 1:
return False
map = {
"{" : "}",
"[" : "]",
"(" : ")"
}
stack = []
for i in s : ##遍历字符串
if i in map:
stack.append(map[i]) #压入栈里
else:
if len(stack) != 0: #栈不为空
top_element = stack.pop() #取出栈顶元素 继续循环
if i != top_element: #括号不匹配则返回FALSE
return False
else: ##匹配左括号则继续循环
continue
else:
return False # 栈为空 返回FALSE
return len(stack) == 0