题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入: s = "()"
输出: true
示例 2:
输入: s = "()[]{}"
输出: true
示例 3:
输入: s = "(]"
输出: false
提示:
1 <= s.length <= 104s仅由括号'()[]{}'组成
解题思路
- 遍历字符串,遇到左括号可以利用一个栈来存左括号。遇到右括号看栈顶元素是不是对应的,遍历完再看看有没有多余的左括号即可。
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
}