leetcod20-有效的括号
leetcode 20
思路
利用栈来解答,因为有效的括号是成对出现的,所以每一个[
都会对应着一个]
,每一个(
都会对应着一个)
,每一个{
都对应着}
所以当出现( { [
这些符号时,我们把相对应的另一半push到栈中,如果出现的不是这些符号,那就是出现的另一半符号,此时我们需要出栈,判断pop出的符号和当前符号是否相等,如果相等说明成功匹配到另一半,如果不相等则说明匹配错误,例如符号'([)]'
就是无效的,当匹配到)的时候,pop出来的元素是],不匹配,所以会直接return false,另外还有一种情况是,stack中的已经没有元素了,但是还有有括号的出现,那一定也是不符合的,比如这样的例子:)(
,也是无效括号
最后字符串遍历完成,如果stack中仍然存在元素,说明左括号多了,比如:((()
,仍然无效
解答
var isValid = function(s) {
let stack = [];
for(let i = 0;i < s.length;i++){
if(s[i] === '('){
stack.push(')')
}else if(s[i] === '{'){
stack.push('}')
}else if(s[i] === '['){
stack.push(']')
}else if(!stack.length || s[i]!==stack.pop()){
return false;
}
}
return stack.length === 0;
};