当前位置:首页 > Go > 正文

Go语言栈的括号匹配实战(手把手教你用栈解决括号匹配问题)

Go语言栈实现 的学习过程中,括号匹配是一个经典且实用的问题。无论你是刚接触 Go编程入门 的小白,还是正在深入理解 数据结构教程 的开发者,掌握如何用栈来判断字符串中的括号是否合法配对,都是非常重要的技能。

Go语言栈的括号匹配实战(手把手教你用栈解决括号匹配问题) Go语言栈实现 括号匹配算法 数据结构教程 Go编程入门 第1张

什么是括号匹配?

括号匹配指的是:给定一个只包含 '('、')'、'['、']'、'{'、'}' 的字符串,判断其中的括号是否成对出现且顺序正确。例如:

  • ()[]{} 是合法的
  • ([)] 是非法的(虽然数量相等,但顺序不对)
  • (( 是非法的(缺少右括号)

为什么用栈?

栈是一种“后进先出”(LIFO)的数据结构,非常适合处理这种需要“最近匹配”的场景。当我们遇到左括号时,将其压入栈;遇到右括号时,就从栈顶弹出一个左括号,看是否与当前右括号匹配。如果最后栈为空,说明所有括号都成功配对。

Go语言实现栈

Go语言没有内置的栈类型,但我们可以用切片(slice)轻松实现一个简单的栈。

type Stack struct {    items []rune}// 入栈func (s *Stack) Push(item rune) {    s.items = append(s.items, item)}// 出栈func (s *Stack) Pop() rune {    if s.IsEmpty() {        return 0 // 表示空栈    }    index := len(s.items) - 1    item := s.items[index]    s.items = s.items[:index]    return item}// 判断栈是否为空func (s *Stack) IsEmpty() bool {    return len(s.items) == 0}

括号匹配函数实现

接下来,我们编写核心的括号匹配函数。该函数会遍历字符串中的每个字符,并利用上面定义的栈来判断括号是否合法。

func isValid(s string) bool {    stack := &Stack{}    // 定义括号映射关系:右括号 -> 左括号    pairs := map[rune]rune{        ')': '(',        ']': '[',        '}': '{',    }    for _, char := range s {        if char == '(' || char == '[' || char == '{' {            // 遇到左括号,入栈            stack.Push(char)        } else if char == ')' || char == ']' || char == '}' {            // 遇到右括号            if stack.IsEmpty() {                return false // 栈空,无左括号可匹配            }            top := stack.Pop()            if top != pairs[char] {                return false // 括号类型不匹配            }        }        // 忽略非括号字符(根据题目要求可选)    }    // 最后栈必须为空,才算完全匹配    return stack.IsEmpty()}

完整示例与测试

下面是一个完整的 Go 程序,包含主函数和几个测试用例:

package mainimport "fmt"// (此处省略 Stack 结构体和方法)// (此处省略 isValid 函数)func main() {    testCases := []string{        "()",        "()[]{}",        "(]",        "([)]",        "{[]}",        "((",    }    for _, tc := range testCases {        result := isValid(tc)        fmt.Printf("输入: %-10s → 匹配结果: %t\n", tc, result)    }}

运行结果如下:

输入: ()         → 匹配结果: true输入: ()[]{}     → 匹配结果: true输入: (]         → 匹配结果: false输入: ([)]       → 匹配结果: false输入: {[]}       → 匹配结果: true输入: ((         → 匹配结果: false

总结

通过本教程,你已经掌握了如何在 Go语言栈实现 的基础上解决 括号匹配算法 问题。这不仅是一个面试高频题,更是理解栈这一 数据结构教程 核心概念的绝佳实践。希望这篇 Go编程入门 教程能帮助你打下坚实的基础!

动手试试吧!修改代码,加入更多括号类型或处理其他符号,加深你的理解。