题目描述
给定一个只包括 ’(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = ”()“
输出:true
示例 2:
输入:s = ”()[]{}“
输出:true
示例 3:
输入:s = ”(]“
输出:false
示例 4:
输入:s = ”([])“
输出:true
思路&js代码
1、栈
var isValid = function(s) {
if (s.length % 2) { // s 长度必须是偶数
return false;
}
const mp = {')': '(', ']': '[', '}': '{'};
const st = [];
for (const c of s) {
if (!mp.hasOwnProperty(c)) { // c 是左括号
st.push(c); // 入栈
} else if (st.length === 0 || st.pop() !== mp[c]) { // c 是右括号
return false; // 没有左括号,或者左括号类型不对
}
}
return st.length === 0; // 所有左括号必须匹配完毕
};