LeetCode面向运气之Javascript—第20题-有效的括号-95.97%

该文章讨论了LeetCode第20题的解决方案,即检查一个字符串是否由正确匹配的括号组成。通过使用栈数据结构,遍历字符串,将左括号入栈,遇到右括号时尝试匹配栈顶的左括号,确保括号的有效性。如果字符串长度为奇数、首字符为右括号、末字符为左括号或者无法匹配的括号,则返回false。
摘要由CSDN通过智能技术生成

LeetCode第20题-有效的括号

题目要求

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

举例

输入:s = “()”
输出:true

输入:s = “()[]{}”
输出:true

输入:s = “(]”
输出:false

思考

  1. 非偶数长度时false
  2. 第0位是右括号false
  3. 最后一位是左括号false
  4. 队列的概念,循环字符串,左括号入列,右括号匹配上一个。匹配成功左括号出列,不匹配false

代码实现

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function (s) {
    const isLeft = (str) => {
        if (str === '(' | str === '[' | str === '{') return true
        return false
    }
    const isRight = (str) => {
        if (str === ')' | str === ']' | str === '}') return true
        return false
    }
    if (isRight(s[0])) return false
    if (isLeft([s[s.length - 1]])) return false
    if (s.length % 2 !== 0) return false

    const objMap = {
        "(": ")",
        "[": "]",
        "{": "}"
    }

    let stack = []
    for (let i = 0; i < s.length; i++) {
        if (isLeft(s[i])) {
            stack.push(s[i])
        }
        else {
            if (objMap[stack[stack.length - 1]] === s[i]) {
                stack.pop()
            }
            else {
                return false
            }
        }
    }
    return stack.length === 0
};

在这里插入图片描述
PS:真的很运气,高中低及不稳定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值