题目
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。
示例
输入: s = "()"
输出: true
输入: s = "()[]{}"
输出: true
输入: s = "{[]}"
输出: true
解题思路
本题主要是运用栈的思想,先进后出:让字符串依次进入栈,如果遇到成对的括号,就出栈,最后如果栈中为空,表示有效的括号;这里运用了map作为左右括号的映射,如果最后一个入栈的括号与下一个括号成对则出栈。
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
// 定义栈
const stack = [];
// 定义成对的括号map
const map = {
'{':'}',
'(':')',
'[':']'
}
s.split('').forEach(item => {
const len = stack.length;
// 如果成对了,则出栈,否则入栈
if (len && map[stack[len - 1]] === item) {
stack.pop();
} else {
stack.push(item);
}
})
// 栈为空表示有效的括号
return stack.length === 0;
};