/*给定一个只包括 '(', ')', '{', '}', '[', ']'的字符串 s,
判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合,且左括号必须以正确的顺序闭合*/
var isValid = function(s) {
// 如果字符串长度为奇数,直接返回false
if (s.length % 2 !== 0) {
return false;
}
// 使用数组作为栈
const stack = [];
// 遍历字符串中的每一个字符
for (let i = 0; i < s.length; i++) {
const char = s[i];
// 如果是左括号,则将其对应的右括号压入栈中
if (char === '(') {
stack.push(')');
} else if (char === '[') {
stack.push(']');
} else if (char === '{') {
stack.push('}');
} else {
// 如果是右括号,检查栈顶元素是否与之匹配
// 如果栈为空或栈顶元素不匹配,则返回false
if (stack.length === 0 || stack.pop() !== char) {
return false;
}
}
}
// 最后,栈必须为空才算有效
return stack.length === 0;
};
console.log(isValid("((({}[])))")); // true
console.log(isValid("()[]{}")); // true
console.log(isValid("(]")); // false
console.log(isValid("([)]")); // false
console