Go语言实战案例-括号匹配算法(go语言例子)

Go语言实战案例-括号匹配算法(go语言例子)

在编译器、表达式求值、代码格式化等场景中,我们经常需要判断括号是否成对匹配且顺序正确。这是一个经典的栈(Stack)应用问题

一、问题描述

给定一个字符串,判断其中的括号是否匹配。括号可能包括:

  • • 圆括号
  • • [] 方括号
  • • {} 花括号

要求:

  • • 每个左括号必须有对应的右括号
  • • 括号必须按正确的嵌套顺序闭合

示例

  • 输入
  • 输出
  • ""true
  • "([]{})"true
  • "(]"false
  • "([)]"false
  • "{[]}"true
二、算法思路
  1. 1. 使用栈保存未匹配的左括号
  2. 2. 遍历字符串:
    • • 遇到左括号 (、[、{ → 压入栈
    • • 遇到右括号 )、]、} → 弹出栈顶元素,判断是否是对应的左括号
    • • 若不匹配或栈为空 → 返回 false
  3. 3. 遍历结束后,如果栈不为空 → 返回 false
  4. 4. 否则 → 返回 true
三、Go语言实现

packagemainimport("fmt")funcIsValidBrackets(sstring)bool{ stack := []rune{} pairs :=map[rune]rune{')':'(',']':'[','}':'{', }for_, ch :=ranges {switchch {case'(','[','{': stack =append(stack, ch)// pushcase')',']','}':iflen(stack) ==0|| stack[len(stack)-1] != pairs[ch] {returnfalse} stack = stack[:len(stack)-1]// pop} }returnlen(stack) ==0}funcmain { tests := []string{"","([]{})","(]","([)]","{[]}"}for_, t :=rangetests { fmt.Printf("%s -> %v\n", t, IsValidBrackets(t)) }}输出-> true([]{}) -> true(] -> false([)] -> false{[]} -> true

四、复杂度分析

  • 时间复杂度:O(n),只需一次遍历
  • 空间复杂度:O(n),栈最多存储 n 个字符
五、进阶扩展

1. 增加其他符号可以扩展 pairs 表,支持 或自定义符号。

2. 忽略非括号字符在表达式中可能包含数字、运算符,可以在 switch 中只处理括号。

3. 处理大规模数据当输入很大时,可以考虑流式处理(分块判断)。

六、总结

通过本篇案例,你学习了:

  • • 使用栈解决括号匹配问题
  • • Go 语言中 map、slice 的基本操作
  • • 如何分析算法的时间和空间复杂度

栈的应用非常广泛,除了括号匹配,还可用于表达式求值、撤销操作、DFS搜索等场景。

特别声明:[Go语言实战案例-括号匹配算法(go语言例子)] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

王阳张宥浩俞灏明邓恩熙《围猎》(看书看剧在周建焯阅)(没有人觉得王阳和俞灏明像吗)

该剧改编自真实案件纪实文学《飓风行动·围猎》,讲述缉毒警察杨一鹏(王阳饰)历经三年追捕,最终将潜逃毒贩牟森(俞灏明饰)绳之以法的惊险故事。 -王阳 饰 缉毒警察杨一鹏,这是他首次挑战缉毒题材,饰演一位坚韧果…

王阳张宥浩俞灏明邓恩熙《围猎》(看书看剧在周建焯阅)(没有人觉得王阳和俞灏明像吗)

硅胶蒸笼垫比传统蒸布好用吗,本文来告诉你[今日更新](硅胶蒸笼垫子哪一种最好)

硅胶蒸笼垫比传统蒸布好用吗,在蒸制包子、馒头、糕点时,你是否也遇到过这样的烦恼:蒸布反复使用后发黄发硬,粘底破皮成了家常便饭,甚至担心棉布残留的碎屑影响健康?更有趣的是,硅胶垫的导热均匀性甚至被甜品师开发出新…

硅胶蒸笼垫比传统蒸布好用吗,本文来告诉你[今日更新](硅胶蒸笼垫子哪一种最好)

足球靠谱的下单软件推荐,安全正规有保障!(买足球的app推荐)

作为国家体彩中心推出的正规平台,它提供了竞彩足球、传统足彩等多种玩法的投注服务。 特别值得一提的是鸿裕购彩平台,它创新性地采用了"线上预约+实体出票"的模式。平台涵盖了从主流联赛到冷门赛事的多彩种玩法,无

足球靠谱的下单软件推荐,安全正规有保障!(买足球的app推荐)

贵港土工格栅(贵港土工格栅批发市场)

(4)经济性:虽然土工格栅的初期投入相对较高,但由于其能够有效提高工程的安全性和耐久性,从长远来看能够降低维护成本,具有良好的经济效益。 (1)道路工程:在道路建设中,土工格栅常用于路基加固,能够有效提高路…

贵港土工格栅(贵港土工格栅批发市场)

进化了4亿年,从一条鱼变成一个人,人类为了进化成“智慧体”,到底有多拼命?(46亿年进化重奏)

古人类的颌骨够大,智齿是有用的 “备用牙齿”,到了现代人这里,它成了纯粹的 “进化遗留垃圾”,每年都有无数人花钱拔掉它 ——这大概是祖宗们为了聊天付出的 “后期维护费”。 回顾这 4 亿年的进化史,你会发现…

进化了4亿年,从一条鱼变成一个人,人类为了进化成“智慧体”,到底有多拼命?(46亿年进化重奏)