20. 有效的括号
Opened this issue · 1 comments
mengjian-github commented
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
mengjian-github commented
这是一道经典的题目,我们可以利用栈的特性来匹配括号:
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
if (s.length % 2 !== 0) {
return false;
}
function isMatch(l, r) {
if (l === '(') {
return r === ')';
} else if (l === '[') {
return r === ']';
} else if (l === '{') {
return r === '}';
}
return false;
}
const leftStack = [];
for (const c of s) {
switch(c) {
case '(':
case '[':
case '{':
leftStack.push(c);
break;
case ')':
case ']':
case '}':
const left = leftStack.pop();
if (!isMatch(left, c)) {
return false;
}
}
}
return leftStack.length === 0;
};