有效的括号
难度:⭐⭐ 面试基础
考点
- 栈的经典应用
- 字符匹配
- 边界处理
题目描述
给定一个只包含 '('、')'、'{'、'}'、'['、']' 的字符串 s,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合
- 左括号必须以正确的顺序闭合
- 每个右括号都有一个对应的相同类型的左括号
函数签名
go
func isValid(s string) bool示例
输入:s = "()[]{}"
输出:true
输入:s = "(]"
输出:false
输入:s = "{[()]}"
输出:true提示
- 遇到左括号入栈,遇到右括号弹栈匹配
- 最后栈必须为空
参考答案(Go)
点击展开参考答案
go
//go:build ignore
package answer
func isValid(s string) bool {
stack := make([]byte, 0)
pairs := map[byte]byte{
')': '(',
']': '[',
'}': '{',
}
for i := 0; i < len(s); i++ {
ch := s[i]
if ch == '(' || ch == '[' || ch == '{' {
stack = append(stack, ch)
} else {
if len(stack) == 0 || stack[len(stack)-1] != pairs[ch] {
return false
}
stack = stack[:len(stack)-1]
}
}
return len(stack) == 0
}