给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
示例 1:
输入:s = "()"
输出:true示例 2:
输入:s = "()[]{}"
输出:true示例 3:
输入:s = "(]"
输出:false提示:
1 <= s.length <= 104s 仅由括号 '()[]{}' 组成括号必须用相同的有括号闭合,所以可以利用这一特性,声明一个 stack ,循环传入的字符串,如果是 ['(', '[', '{'] 其中的一个,就存入栈中,如果不是,则弹出 stack 最后一个元素,看时候能对应上,如果能对应上,进行下一次循环,如果对应不上直接返回 false .
const isValid = (s) => {
if(s.length % 2 !== 0 ) return false; // 如果传入字符串长度不是偶数,直接返回 false
const map = new Map([ // 建立对应关系
[')', '('],
[']', '['],
['}', '{'],
])
const stack = [];
for (let k of s) {
if (['(', '[', '{'].includes(k)) { //如果是左括号,先存起来
stack.push(k);
continue;
} else if (stack.length > 0 && map.get(k) === stack.pop()) {
// 走到这里,说明当前的 k 是右括号,取出与之对应的左括号 和 stack 中存的最后一个左括号进行对比。
// 如果相等,则证明括号能匹配上,进行下一次循环
continue;
} else { // 如果匹配不上,说明括号不成对,直接返回 false
return false
}
}
return stack.length === 0
}