题目:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
**输入:**s = "()"
**输出:**true
示例 2:
**输入:**s = "()[]{}"
**输出:**true
示例 3:
**输入:**s = "(]"
**输出:**false
示例 4:
**输入:**s = "([])"
**输出:**true
示例 5:
**输入:**s = "([)]"
**输出:**false
提示:
1 <= s.length <= 104s仅由括号'()[]{}'组成
答案:
class Solution:
def isValid(self, s: str) -> bool:
"""
使用栈来检查括号匹配
时间复杂度:O(n)
空间复杂度:O(n)
"""
# 定义括号匹配映射
bracket_map = {
')': '(',
']': '[',
'}': '{'
}
# 使用列表作为栈
stack = []
for char in s:
# 如果是右括号
if char in bracket_map:
# 如果栈为空或栈顶元素不匹配当前右括号
if not stack or stack[-1] != bracket_map[char]:
return False
# 匹配成功,弹出栈顶元素
stack.pop()
# 如果是左括号,压入栈中
else:
stack.append(char)
# 如果栈为空,说明所有括号都匹配成功
return len(stack) == 0
# 测试代码
if __name__ == "__main__":
solution = Solution()
# 测试用例
test_cases = [
("()", True),
("()[]{}", True),
("(]", False),
("([])", True),
("([)]", False),
("", True), # 空字符串
("{", False), # 只有左括号
("}", False), # 只有右括号
("((()))", True), # 嵌套括号
("([{}])", True), # 嵌套不同类型括号
("([{)]}", False), # 不正确的嵌套
]
for i, (test_input, expected) in enumerate(test_cases):
result = solution.isValid(test_input)
status = "✓" if result == expected else "✗"
print(f"测试用例 {i+1}: '{test_input}' => {result} (期望: {expected}) {status}")