当前位置:   article > 正文

华为OD面试手撕算法-合法的括号对

华为OD面试手撕算法-合法的括号对

 题目描述

本题为leetcode原题(简单难度):有效的括号

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

有效字符串需满足:

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

解题思路

栈 + 哈希表

1. 构造存储括号对<key为右括号,val为左括号>的哈希表;

2. 栈操作:

        1)若当前元素为左括号,直接入栈,继续遍历下一个元素;

        2)若当前元素为右括号,基于map判断其是否与栈顶元素相匹配?

                ①不匹配:直接返回false;

                ②匹配:栈顶元素出栈,继续遍历下一个元素;

遍历完成后,判断栈是否为空:

        若为空,返回true;否则返回false

代码实现

Golang代码实现如下

  1. func isValid(s string) bool {
  2. //思路:使用栈 + map 完成字符串匹配
  3. matchMap := map[byte]byte{
  4. ')': '(',
  5. ']': '[',
  6. '}': '{',
  7. }
  8. stack := list.New()
  9. for _,c := range s {
  10. if c == '(' || c == '[' || c == '{' {
  11. //左括号:直接入栈
  12. stack.PushBack(byte(c))
  13. }else if stack.Len() > 0 && stack.Back().Value.(byte) == matchMap[byte(c)] {
  14. //右括号:判断是否与栈顶的左括号匹配
  15. stack.Remove(stack.Back())
  16. }else{
  17. return false
  18. }
  19. }
  20. return stack.Len() == 0
  21. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/607186
推荐阅读