有效的括号
1.题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 示例 1: 输入:s = "()" 输出:true 示例 2: 输入:s = "()[]{}" 输出:true 示例 3: 输入:s = "(]" 输出:false 示例 4: 输入:s = "([)]" 输出:false 示例 5: 输入:s = "{[]}" 输出:true 提示: 1 <= s.length <= 104 s 仅由括号 '()[]{}' 组成
2.题目来源
3.题解(使用JavaScript作为编程语言)
解答这个题最好的方法就是栈,我们可以利用栈的后进先出的特点,依次对比每个括号的有效性
另外,我们可以将三种括号作为key和value存入哈希表中,用来查值
var isValid = function(s) {
if(s.length%2!=0)
return false
const stk = []
//创建map表,右括号作为key,左括号作为value
const map = new Map([
[')','('],
['}','{'],
[']','['],
])
//遍历s
for(let ch of s){
if(map.has(ch)){
//如果map存在key的值为ch,并且栈顶元素的值与map对应key的value一样,如果这个括号合法,否则不合法直接return false
if(!stk.length || stk[stk.length-1] != map.get(ch)){
return false
}
stk.pop()
}else{
//如果map中不存在key的值为ch,则说明此时遍历的是左括号,直接入栈
stk.push(ch)
}
}
//最后判断栈中元素是否为空,如果为空说明括号都已经匹配成功,返回true
return stk.length?false:true
}