🧩 Swift 实现有效括号匹配算法

🧠一、 问题描述

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

有效字符串需满足:

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

例如:

"()"      -> true
"()[]{}"  -> true
"(]"      -> false
"([)]"    -> false
"{[]}"    -> true

🌟二、 思路分析

这道题目是典型的栈(stack)应用题。我们可以用栈来解决:

  • 遍历字符串中的每个字符。
  • 遇到左括号 ([{ 时,将其入栈。
  • 遇到右括号时,检查栈顶元素是否是对应的左括号:
    • 如果是,则弹出栈顶继续判断。
    • 如果不是,或者栈为空,说明括号不匹配,返回 false
  • 遍历结束后,如果栈为空,说明所有括号匹配,返回 true;否则返回 false

💻三、Swift 实现代码

func isValid(_ s: String) -> Bool {
    var stack = [Character]()
    let mapping: [Character: Character] = [")": "(", "]": "[", "}": "{"]

    for char in s {
        if let match = mapping[char] {
            // 遇到右括号,检查栈顶是否匹配
            if stack.isEmpty || stack.removeLast() != match {
                return false
            }
        } else {
            // 左括号入栈
            stack.append(char)
        }
    }
    // 栈为空即全部匹配成功
    return stack.isEmpty
}

📊四、 测试示例

print(isValid("()"))        // true
print(isValid("()[]{}"))    // true
print(isValid("(]"))        // false
print(isValid("([)]"))      // false
print(isValid("{[]}"))      // true

✅五、 总结

利用栈结构,匹配括号问题的思路十分清晰,且效率高。
Swift 中数组可以很好地模拟栈的行为,使用 append 入栈,removeLast 出栈。
掌握这种算法思路,对于解决类似括号匹配、表达式计算等问题非常有帮助。


如果你喜欢这篇文章,欢迎点赞和关注!
也欢迎留言交流,分享你的解法和思路。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐