来源:力扣(LeetCode)
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
- 1 <= s.length <= 104
- s 仅由括号 '()[]{}' 组成
方法:
- 首先括号一定是成双成对的,所以,字符串一定得是偶数
- 因为括号都是
[(({{}}))]
这样的,适合采用栈来存储括号 - 在存储之前,我们先检查栈顶是否有匹配的括号,若有,直接删除栈顶;否则将该括号存进栈中
- 最后如果栈为空,说明每个左括号都有一个有效的右括号与其匹配,返回
true
;否则返回true
因为有三种类型的括号,所以我们创建一个哈希表存储每一种类型的括号
var isValid = function(s) {
if (s.length % 2 !== 0) {
return false;
};
let stack = [];
let map = new Map([
[')', '('],
[']', '['],
['}', '{']
]);
for (let key of s) {
if (map.has(key)) {
if (!stack.length || stack[stack.length - 1] !== map.get(key)) {
flag = false
return false
};
stack.pop();
} else {
stack.push(key);
};
};
return !stack.length
};