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