更多好文vx golang技术实验室
检查全部括号是否匹配
leetcode20
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
解题思路
-
如果有一个右括号和前一个是不匹配的,就是不匹配 -
将左括号和右括号分开 -
左括号入栈,遇到右括号和栈顶的元素对比 -
防止全部左括号和全部右括号的情况
此时遇到第一个右括号和栈顶的元素对比,如果满足,消除栈顶的这个元素
此时满足消除
一次进行
- 在遍历中有右括号的时候,栈为空,就不满足
- 最后栈不是空的,也是有不匹配的
代码
func isValid(s []byte) bool {
Mp := map[byte]byte{
')':'(',
'}':'{',
']':'[',
}
stack := []byte{}
for _ ,v := range s{
if v1,ok := Mp[v];!ok{
stack = append(stack,v)
}else {
if len(stack) <1 || v1 != stack[len(stack)-1]{
return false
}else{
stack = stack[0:len(stack)-1]
}
}
}
if len(stack) > 0{
return false
}
return true
}
更多好文vx golang技术实验室
|