每日一练——有效的括号

题目:

给定一个只包括 '('')''{''}''['']' 的字符串 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}")
相关推荐
豆瓣鸡6 分钟前
算法日记 - Day3
java·开发语言·算法
萧瑟余晖22 分钟前
Java深入解析篇九之NIO详解
java·网络·nio
夏殇之殁37 分钟前
包中创建自定义列表项。 . 使用自定义列表项进行数据绑定 . 将天气预报数据保存到本地内存表,通过LiveBindings进行显示。 ...
服务器·前端·javascript
韭菜炒鸡肝天41 分钟前
VTK开发笔记(一):VTK介绍,Qt..+VSx+VTK.编译
开发语言·笔记·qt
The Chosen One98542 分钟前
高进度算法模板速记(待完善)
java·前端·算法
Aaron - Wistron1 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
新中地GIS开发老师2 小时前
WebGIS开发学生作品|低空航天管理与航线规划系统
前端·javascript·webgis·三维gis开发
丙氨酸長鏈2 小时前
Web前端入门第 问:JavaScript 一个简单的 IndexedDB 数据库入门示例
前端·javascript·数据库
Dxy12393102162 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
0566463 小时前
Python康复训练——常用标准库
开发语言·python·学习