题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。力扣链接
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
分析
大多数的题目解题思路都是类似的,首先要考虑边界和特殊情况
var len = s.length;
if(len === 0) {
// 空字符串
return true
}
if(!len % 2) {
// 奇数字符串
return false
}
其次运用堆栈的原理,如果遇到左括号就往栈里推元素,如果遇到右括号就判断当前栈顶元素,如果形成闭环就把栈顶元素删除,如果不是闭环则返回false
var stack = []
for(var i = 0; i < len; i++) {
var item = s[i]
if((/([\(]|[\{]|[\[])/i).test(item)) {
stack.push(item)
}
else if(item == ')') {
if(stack.pop() !== '(') {
return false
}
}
else if(item == '}') {
if(stack.pop() !== '{') {
return false
}
}
else if(item == ']') {
if(stack.pop() !== '[') {
return false
}
}
}
var result = stack.length === 0
return result

哎呦我这可怜的数据。。。 下课