掘金团队号上线,助你 Offer 临门! 点击 查看详情
一、题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
eg1:
输入:s = "()"
输出:true
eg2:
输入:s = "()[]{}"
输出:true
eg3:
输入:s = "(]"
输出:false
eg4:
输入:s = "([)]"
输出:false
eg5:
输入:s = "{[]}"
输出:true
二、思路分析
有题意可知,本题属于栈的数据特点,先进后出的数据结构。
如果碰到左括号就入栈,
碰到右括号需要检测一下栈中最后一个入栈的
- 如果不匹配就返回false
- 匹配就弹出
最后检查一下栈里的剩余长度
- 为0就是有效的括号
- 不为0就不是
三、解题代码
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
const len = s.length
if (len % 2 !== 0) return false
let stack = []
for (let cur of s) {
switch(cur) {
case "(":
case "[":
case "{":
stack.push(cur)
break
case ")":
if (stack.pop() !== '(') return false
break
case "]":
if (stack.pop() !== '[') return false
break
case "}":
if (stack.pop() !== '{') return false
break
}
}
return stack.length === 0
};
四、总结
- 先进后出属于栈的数据结构,可用栈来解题
- 每天一练,持续学习