每日一练——有效的括号

题目:

给定一个只包括 '('')''{''}''['']' 的字符串 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}")
相关推荐
MediaTea2 小时前
Python:内置类型也是类对象
开发语言·python
gpldock2222 小时前
Flutter App Templates Deconstructed: A 2025 Architectural Review
开发语言·javascript·flutter·wordpress
程序员欣宸2 小时前
LangChain4j实战之十六:RAG (检索增强生成),Naive RAG
java·人工智能·ai·langchain4j
Ivanqhz2 小时前
现代异构高性能计算(HPC)集群节点架构
开发语言·人工智能·后端·算法·架构·云计算·边缘计算
白中白121382 小时前
Vue系列-2
前端·javascript·vue.js
qq_336313932 小时前
javaweb-Maven
java·maven
Sayuanni%32 小时前
数据结构_Map和Set
java·数据结构
Demon_Hao2 小时前
Spring Boot开启虚拟线程ScopedValue上下文传递
java·spring boot·后端
Traced back2 小时前
# C# 基础语法完全指南
开发语言·c#