leetcode 20.
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
匹配括号,可以用栈的形式,栈是先进先出,先定义一个map对象把括号都一一匹配起来,然后开始匹配,如果是左边的则压入栈,一旦匹配上,则把最上面的符号出栈,然后再继续匹配,如果匹配到另一边的但是不是符合的括号,则表示不是有效的字符串,一进一出,循环结束判断最后的栈是否是空的。 代码如下:
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
// 定义要匹配的map
const obj = {
'(':')',
'{':'}',
'[':']',
};
const stack = []; // 空栈
for(let i=0; i< s.length; i++) {
const val = s[i];
if (val in obj) {
// 压栈
stack.push(val);
} else {
if (val !== obj[stack.pop()]) {
// 没有匹配到符合的括号
return false;
}
}
}
return !stack.length;
}