题目介绍
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
示例1
输入: s = "()"
输出: true
示例2
输入: s = "()[]{}"
输出: true
示例3
输入: s = "(]"
输出: false
示例4
输入: s = "([)]"
输出: false
示例5
输入: s = "{[]}"
输出: true
提示:
1 <= s.length <= 10^4s仅由括号'()[]{}'组成 leetcode-20 有效的括号 b站视频
解答思路
本题用栈来模拟,如果遇到左括号则入栈,如果遇到右括号,查看栈顶元素是否是与右括号相匹配的左括号,如果不是,说明括号无法闭合,如果遍历完整个字符串,所有的右括号都能够匹配到左括号,还需要再检查栈是否为空,如果不为空,说明存在无法配对的左括号,否则则是一个有效字符串
- 遍历 s 字符串的每个字符,如果是左括号,入栈
- 如果是右括号,查看栈顶元素是否匹配,不匹配,返回 false,匹配则继续遍历下一位
- 直到 s 遍历完成,判断栈的大小,如果不为0,返回 false,否则返回 true
解题代码
var isValid = function(s) {
const stack = []
for (let i = 0; i < s.length; i++) {
if (s[i] === '(' || s[i] === '{' || s[i] === '[') {
stack.push(s[i])
continue
}
const val = stack.pop()
switch (s[i]) {
case ')':
if (val !== '(') {
return false
}
break
case '}':
if (val !== '{') {
return false
}
break
case ']':
if (val !== '[') {
return false
}
break
}
}
return !stack.length
};