典型的用stack来解决的题目,同时可以看下22题
用 栈 来解决这个问题,因为栈遵循 后进先出 的原则,非常适合处理括号匹配问题。当遇到左括号时,将其压入栈中;当遇到右括号时,检查栈顶是否是相应的左括号,如果匹配,则弹出栈顶元素。最后,如果栈为空,说明所有的括号匹配正确,否则不匹配。
var isValid = function (s) {
let stack = []
// 方便查找匹配的括号
let hash = new Map()
hash.set('(', ')')
hash.set('{', '}')
hash.set('[', ']')
for (let i = 0; i < s.length; ++i) {
if (s[i] === '(' || s[i] === '[' || s[i] === '{') {
stack.push(s[i])
} else {
// 当前括号与栈顶的不匹配,那就直接是false了
if (s[i] !== hash.get(stack.pop())) {
return false
}
}
}
return stack.length === 0
};
map反向
var isValid = function (s) {
let map = new Map();
map.set(")", "(");
map.set("]", "[");
map.set("}", "{");
let stack = [];
for (let i = 0; i < s.length; ++i) {
if (["(", "[", "{"].includes(s[i])) {
stack.push(s[i]);
} else {
if (stack.pop() !== map.get(s[i])) return false;
}
}
return stack.length === 0;
};