每日一练——有效的括号

题目:

给定一个只包括 '(',')','{','}','[',']' 的字符串 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}")
相关推荐
传人2 分钟前
悬停旋转放大和位移效果如何写
前端·javascript·css
vx_Biye_Design14 分钟前
springboot宠物领养与救助平台64334-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·课程设计·宠物
泡茶喝茶写代码16 分钟前
A股量化数据工程:从 REST 接口到策略信号(第 5 篇):板块成分股映射与对齐
java·python·股票数据api·股票数据·股票数据api接口·股票api数据接口·股票量化数据接口
沐晓时光17 分钟前
C语言入门,深入理解指针(2)
c语言·开发语言
vx_Biye_Design17 分钟前
django就业信息推荐系统61953-计算机课程设计、毕业设计
java·vue.js·spring boot·python·架构·django·课程设计
羲云26 分钟前
给 Vue 页面加个 Markdown 编辑器:ME.js 的接入、图片粘贴与音视频
javascript·vue.js
2601_9628857231 分钟前
如何用 Python 做均线粘合选股?(多头发散前的变盘候选)
开发语言·python
知守观33 分钟前
HTML 转 PDF 方案实战:iTextPDF 与 wkhtmltopdf 踩坑复盘,附 Flying Saucer / openhtmltopdf 选型对比
java·后端
2601_9620715736 分钟前
类变量和全局变量的隔离性有什么区别?
java·开发语言·jvm
海绵宝宝转agent43 分钟前
LeetCode100 LRU缓存思路讲解
java·开发语言·缓存