Leetcode.20. 有效的括号

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

有效字符串需满足:

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

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

思路:
一个比较讨巧的方法是:当发现左括号的时候将对应右括号入栈,发现右括号时直接比较栈顶元素是否相同即可,不同就提前退出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
func isValid(s string) bool {
if len(s) == 0 {
return true
}
var stack []rune
for _, ch := range s {
if ch == '(' {
stack = append(stack, ')')
} else if ch == '[' {
stack = append(stack, ']')
} else if ch == '{' {
stack = append(stack, '}')
} else {
fmt.Println(stack, ch)
if len(stack) == 0 {
return false
}
if stack[len(stack)-1] != ch {
return false
}
stack = stack[:len(stack)-1]
}
}
fmt.Println(stack)
if len(stack) == 0 {
return true
}
return false
}