[LeetCode-0020题-有效的括号] | 刷题打卡

131 阅读1分钟

掘金团队号上线,助你 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
};

四、总结

  • 先进后出属于栈的数据结构,可用栈来解题
  • 每天一练,持续学习