每日一练——有效的括号

题目:

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

**输入:**s = "()"

**输出:**true

示例 2:

**输入:**s = "()\[\]{}"

**输出:**true

示例 3:

**输入:**s = "(]"

**输出:**false

示例 4:

**输入:**s = "(\[\])"

**输出:**true

示例 5:

**输入:**s = "()"

**输出:**false

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

答案:

复制代码
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}")
相关推荐
谙忆10244 分钟前
图片裁剪总是跑偏?用 object-fit、object-position 和真实像素把坐标对齐
javascript·css·图像识别
我命由我1234512 分钟前
人脸识别 - 人脸识别选帧
java·人工智能·python·算法·安全·java-ee·人脸识别
宠友信息14 分钟前
IM系统开发技术路线分析,即时通讯源码助力快速搭建聊天应用
java·spring boot·redis·websocket·mysql·uni-app·vue
花归去31 分钟前
ant的a-table更改表格的高度
前端·javascript·html
sibylyue1 小时前
基于 Vben Admin 框架的 Vue 3 前端项目配置文件及常用命令
前端·javascript·vue.js
long3161 小时前
封装(Encapsulation)
java·人工智能·ai·ai编程
SomeB1oody1 小时前
【RustyML入门】7.2. 深入模型持久化
开发语言·后端·机器学习·rust·教程
yaoxin5211231 小时前
502. Java 反射 - 编写 MessageInterceptor 类
java·开发语言
wuyk5551 小时前
Python零基础入门第五章:元组Tuple(不可变容器详解、列表与元组区别)
开发语言·python
风流 少年1 小时前
Spring AI 2.0:阿里云百炼平台(工作流应用)
java·后端·spring