一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第20天,点击查看活动详情。
本题难度:⭐ ⭐ ⭐
本题类型:算法、手写
阿林最近忙爆了,真的没时间认真写文章了,但是再忙也不能忘了学习,不然就懈怠了,最近多更新点前端面试中出现的高频算法题吧。
哪怕每天只学习半小时,也有收获,绝对不能懈怠!
题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
原题地址:leetcode20. 有效的括号
题目要求
输入: s = "()"
输出: true
输入: s = "()[]{}"
输出: true
输入: s = "(]"
输出: false
输入: s = "([)]"
输出: false
输入: s = "{[]}"
输出: true
题目分析
这道题实在太经典了,栈类型题目必刷题之一。
栈这个数据结构具有后入先出的特征,所以可以用来辅助解答本题。
- 定义一个对象,把相匹配的括号值存起来,做匹配时用
- 循环字符串 s,把每一个字符和栈顶的值做匹配
- 如果匹配得上,栈顶元素出栈
- 如果匹配不上,就把当前字符的值入栈
- 最终:
- 栈里面还有值,说明有多余的括号
- 栈里面无值,说明这个字符串是有效的括号
图解:
图片来源:leetcode,侵删。
编码实现
function isValid (s) {
const obj = {
'(': ')',
'[': ']',
'{': '}'
}
let stack = []
for (let char of s) {
if (char === obj[stack[stack.length - 1]]) {
stack.pop()
} else {
stack.push(char)
}
}
return stack.length === 0
}
运行结果
vscode leetcode 插件 yyds! 上班“认真工作”的神器🐶
结尾
阿林水平有限,文中如果有错误或表达不当的地方,非常欢迎在评论区指出,感谢~
如果我的文章对你有帮助,你的👍就是对我的最大支持^_^
我是阿林,输出洞见技术,再会!
上一篇:
「前端每日一问(54)」什么是Tree-Shaking?Vue3 是如何支持 Tree-Shaking 的?
下一篇: