这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战
前言
有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来,由此可见,leetcode的题还是有分量的。今天我们就来会会它们
题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成
栈
介绍
- 判断括号的有效性可以使用「栈」这一数据结构来解决
- 遍历字符串
s,当我们遇到一个左括号的时候,我们希望会有一个对应的右括号将其闭合 - 因为我们先遇到的是
左括号,所有可以先把左括号放到栈数组中 - 当我们遇到一个右括号的时候,只要把
栈中最顶层的数据取出进行对比,如果一直,那么就表示当前括号是有效括号,进行下次循环 - 如果对比不一直,那么,表示当前括号不是一个有效的括号,我们直接返回
false就行 - 在遍历结束后,如果
栈为空,那么就表示,所有的括号都匹配完成,返回false - 否则表示有一部分括号是没有完成匹配的,当前字符串
s不是一个有效的括号,那么返回false即可 - 还有就是,有效括号的长度一定是个偶数,如果是奇数,直接返回
false
解法
var isValid = function (s) {
if (s.length % 2 == 1) return false
const obj = {
'(': ')',
'[': ']',
'{': '}'
}
const stack = []
for (let i = 0; i < s.length; i++) {
const v = obj[s[i]]
if (v) {
stack.push(v)
} else {
const popValue = stack.pop()
if (popValue !== s[i]) {
return false
}
}
}
if (stack.length === 0) {
return true
}
return false
};
写在最后
- 希望你能收获满满