20. 有效的括号
func isValid(s string) bool {
//用哈希表对右括号做一个映射
hash := map[byte]byte{')': '(', ']': '[', '}': '{'}
stack := make([]byte, 0)
if s == "" {
return true
}
for i := 0; i < len(s); i++ {
if s[i] == '(' || s[i] == '[' || s[i] == '{' { //若是左括号,压栈
stack = append(stack, s[i])
} else if len(stack) > 0 && stack[len(stack)-1] == hash[s[i]] {
stack = stack[:len(stack)-1]
} else {
return false
}
}
return len(stack) == 0
}
若是右括号,且stack不为空(为空说明右括号多,返回false),与栈顶元素做匹配,匹配上就出栈(匹配不上返回false)
最后返回
len(stack) == 0,若不为空说明左括号多,返回false
代码巧妙的概括了三种不匹配的情况
- 左括号多(体现在最后返回stack长度不为0)
- 右括号多(栈中元素匹配完了len(stack)==0)
- 与栈顶左括号不匹配
版权声明:本文为wjy23929812原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。