一、题目描述:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "(]"
输出:false
二、思路分析
看到题目描述的时候,一个最傻的想法出现了,括号一共有六个,我分别取六个括号的数量,然后看看数量对不对的上不就行了么。。
第二个 首先边界处理 空字符串直接true
定义一个栈来存储所有的左括号对应的右括号
在JoinMap未匹配到的是右括号
出栈,和当前的val对比,不一致直接false,一致则继续循环
兜底:栈空则true,不为空则false
三、AC 代码:
1.应该算是哈希表吧
var isValid = function (s) {
if (!s) return true
const stack = []
const JoinMap = {
'{': '}',
'(': ')',
'[': ']',
}
for (let i = 0; i < s.length; i++) {
let val = s[i]
let tmp
if (tmp = JoinMap[val]) {
stack.push(tmp)
} else {
if (val !== stack.pop()) {
return false
}
}
}
return !stack.length
};
四、总结:
看完似懂非懂的,当我感觉这个跟罗马数挺像的
本文正在参与「掘金 2021 春招闯关活动」, 点击查看活动详情