给定一个只包括'(',')','{','}','[',']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
class Solution:
def isValid(self, s: str) -> bool:
# 1. 利用栈的 LIFO 特性保存所有“左边的括号”
stack = []
# 2. 以所有“右边的括号”为key值,所有“左边的括号”为value值,保存括号对的关系
mapping = {")": "(", "}": "{", "]": "["}
# 3. 遍历
for char in s:
# 3.1 如果检索到右括号
if char in mapping:
# 获取栈中的最上面的元素并弹出
top_element = stack.pop() if stack else '#'
# 判断“最后一个”入栈的左括号是否与“第一个”检索到的右括号对应
if mapping[char] != top_element:
return False
# 3.2 将所有检索到的左括号压入栈
else:
stack.append(char)
# 4. 如果所有的左括号依次出栈(说明各括号一一对应),则表示括号匹配
return not stack