每日一练——有效的括号

题目:

给定一个只包括 '('')''{''}''['']' 的字符串 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}")
相关推荐
Tian_Hang22 分钟前
C++原型模式(Protype)
开发语言·c++·算法
天天讯通30 分钟前
OKCC 呼叫中心安全性能全解析:技术防护与管理措施指南
大数据·开发语言·网络·人工智能·安全·语音识别
xufengzhu1 小时前
第三方 Python 库 redis-py + hiredis 的使用
开发语言·redis·python
JAVA面经实录9171 小时前
操作系统(面试全覆盖)
java·计算机网络·面试
林希_Rachel_傻希希1 小时前
1小时速通React之Hooks
前端·javascript·面试
jingling5551 小时前
go | 环境安装和快速入门
开发语言·后端·golang
编程的一拳超人1 小时前
Maven 国内高速镜像推荐(按速度排序)
java·maven
yuan199971 小时前
欧拉梁静力与屈曲计算的 MATLAB 实现(有限差分法 + 解析解)
开发语言·算法·matlab
llxxyy卢1 小时前
polar夏季赛部分题目
开发语言·python
AI玫瑰助手1 小时前
Python模块:from...import...导入指定内容
开发语言·python·信息可视化