题目: 有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
'({})[]({[]}){()}' true'([)]{}' false'()[]{}' true
题目分析:栈的先入后出原理与括号的排序特点一致,先入栈的左括号一定后匹配到与之对应的右括号。
1. 遍历括号字符串
2. 如果遇到左括号则入栈。
3. 如果遇到右括号:
3.1 如果此时栈是空的,说明左边没有与之相配的左括号则是无效的括号。
3.2 如果栈不为空,则栈顶元素出栈,与当前元素看是否匹配,不匹配则是无效的括号
匹配继续遍历下个括号。
function isValid(s) {
const map = {
'{': '}',
'[': ']',
'(': ')',
}
const length = s.length;
const stack = [];
for(let i = 0; i < length; i++) {
switch(s[i]) {
case '{':
case '[':
case '(': {
stack.push(s[i]);
break;
}
case '}':
case ']':
case ')': {
if(stack.length === 0) {
return false;
}
const stackTop = stack.pop();
if(map[stackTop] !== s[i]) {
return false;
}
}
}
}
if(stack.length === 0) {
return true;
} else {
return false;
}
}