【leet-code清晰解题思路💯✅】20. 有效的括号

48 阅读1分钟

题目描述

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

有效字符串需满足:

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

示例 1:

输入: s = "()"
输出: true

示例 2:

输入: s = "()[]{}"
输出: true

示例 3:

输入: s = "(]"
输出: false

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

解题思路

  • 遍历字符串,遇到左括号可以利用一个栈来存左括号。遇到右括号看栈顶元素是不是对应的,遍历完再看看有没有多余的左括号即可。
var match = []struct {
   l byte
   r byte
}{
   {'[', ']'},
   {'(', ')'},
   {'{', '}'},
}

func isValid(s string) bool {
   stack := make([]byte, 10002)
   k := 0
   for i := 0; i < len(s); i++ {
      if s[i] == '(' || s[i] == '[' || s[i] == '{' {
         stack[k] = s[i]
         k++
      } else {
         if k == 0 {
            return false
         }
         for _, lr := range match {
            if s[i] == lr.r {
               if stack[k-1] != lr.l {
                  return false
               } else {
                  k--
                  break
               }
            }
         }
      }
   }
   if k > 0 {
      return false
   }
   return true
}

image.png