上次说到Map对象用的不是很熟练,今天做到这个题发现很适合用Map来解,特意记录一下!
题目:有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
**解题思路:先用map对象以键值对的方式存储三种括号信息,定义一个空数组res用来缓存括号状态,循环遍历检测每一个括号字符,用map中的值匹配键,有则在res中删除对应的键,遍历结束res为空则返回true,否则返回false
代码:
```javascript
var isValid = function (s) {
// 定义空数组存储括号状态
let res = [];
let map = new Map();
map.set('(', ')');
map.set('[', ']');
map.set('{', '}');
for (let i = 0; i < s.length; i++) {
// 存储键到res中
if (map.has(s[i])) res.push(s[i]);
else {
if (res.length === 0) return false;
if (map.get(res[res.length - 1]) === s[i]) res.pop();
else return false;
}
}
if (res.length) return false;
return true;
};