var isValid = function (s) {
if (s.length % 2 === 1) {
return false
}
let stack = []
const leftBracket = ['(', '[', '{']
for (let item of s) {
if (leftBracket.some(i => item === i)) {
stack.push(item)
} else {
let box = ''
switch (item) {
case ')':
box = '('
break;
case ']':
box = '['
break;
case '}':
box = '{'
break;
}
if (stack[stack.length - 1] !== box) {
return false
} else {
stack.pop()
}
}
}
if (stack.length === 0) {
return true
} else {
return false
}
};
思路
- 遍历字符串
- 左括号入栈,右括号出栈。
- 出栈时,若当前遍历的字符与栈顶top不是同类型括号,直接返回false。
- 当遍历完字符串,检查字符串长度。长度为0,则返回true。反之,则返回false。
提速
- 当字符串长度为奇数时,永远是false。
- 可以使用字典has、get方法进行提速[
未实现
]。