力扣--有效的括号
有效的括号
题目
:
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
示例1
:
输入:s = “()”
输出:true
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例2
:
输入:s = “()[]{}”
输出:true
示例3
:
输入:s = “(]”
输出:false
JS
思路
创建一个对象,根据
键值对
的形式存储,三个括号。
遍历字符串,如果出现对象中的三个左括号,则入栈
之后维护一个栈顶指针top,使用slice(-1)取出栈顶元素
,再根据对应键取对应值进行匹配
如果匹配成功则弹栈
,如果出现不匹配的直接返回false
最终判断栈长,如果栈中还有元素,即匹配不成功
,返回false
代码
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
//创建一个对象
const map = {
'(' : ')',
'[' : ']',
'{' : '}'
}
//维护一个栈
const stack = []
//遍历字符串s
for(let i = 0; i<s.length; i++){
//item存储字符
let item = s[i]
//初步筛选入栈 此时栈里面全是左括号
if(item in map){
stack.push(item)
}else{
//如果不满足三个左括号条件开始消消乐
//维护栈顶指针
//如果匹配 则弹出
if(map[stack.slice(-1)] === item){
stack.pop()
}else{
return false
}
}
}
//判断栈中是否有元素 有则返回fasle
return !stack.length
};