//有效的括号问题
//给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足:
// 左括号必须用相同类型的右括号闭合。
// 左括号必须以正确的顺序闭合。
/*
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
*/
function isValid(str) {
let len = str.length;
if (len % 2 !== 0) return false;
let obj = {
'(': ')',
'[': ']',
'{': '}'
}
let arr = [];
for (let i = 0; i < len; i++) {
let item = str[i];
// 有左括号就入栈
if (obj[item]) {
arr.push(item);
} else {
// 1. 如果栈内没有左括号,直接false
// 2. 有数据但是栈顶元素和右括号不是一对
if (!arr.length || obj[arr.pop()] !== item) {
return false;
}
}
}
// 检查栈内还有没有元素
return !arr.length;
}