给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
代码如下:
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
const n = s.length;
if(n%2!=0){
return false;
}
const stack = [];
const pairs = new Map([
[")","("],
["]","["],
["}","{"]
]);
for(let ch of s){//遍历字符串
if(pairs.has(ch)){
if(!stack.length||stack[stack.length-1]!==pairs.get(ch)){
return false;
}
stack.pop();
}
else{
stack.push(ch);
}
}
return !stack.length;
};
思路:模拟入栈出栈,遇到左括号就进栈,遇到右括号,先判断与栈顶括号是否匹配,如果不匹配直接返回false,否则将栈顶元素出栈,随后判断栈是否为空,如果栈空则返回turn,否则返回false。
Map中的方法:
- get(“value”):用来获取Map对象中指定元素
- has(“key”):返回bool值,用来判断Map对象中对应键是否存在相应的值
- set(“key”,“value”):为Map对象添加一个指定键和值的新元素
解释
if(pairs.has(ch))
用来判断是左括号还是右括号的,ch在has中代表键,上面代码中定义了右括号为键,所以如果是右括号就返回true并进行if里面的代码。若不是就返回false,将元素入栈