【leetcode】20.有效的括号js

碎碎念

啊啊啊啊昨天考完六级!!感觉要挂、、、写点算法手撕压压惊

题目

解答:栈

javascript 复制代码
/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    const stack = []
    const str = Array.from(s)
    const left = new Set(['(', '[', '{'])
    const right = new Set([')', ']', '}'])
    while (str.length > 0) {
        const cur = str[0]
        str.shift()
        if (left.has(cur)) {
            stack.push(cur)
        } else if (right.has(cur)) {
            if (stack.length === 0) return false
            const top = stack.pop()
            const match = (top === '(' && cur === ')' || top === '[' && cur === ']' || top === '{' && cur === '}')
            if (!match) {
                return false
            }
        }
    }
    return stack.length === 0
};

写c++的时候顺手了while条件写成栈非空,但其实这里更关注处理字符串,最后再判断栈是不是空。

解答:栈+哈希表(优化,题解学的)

javascript 复制代码
/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    if(s.length % 2 === 1) return false
    const mp = {'(': ')', '[': ']', '{': '}'}
    const stack = []
    for (const c of s) {
        if (mp[c]) {
            // 如果是左括号,对应的右括号入栈
            stack.push(mp[c])
        } else if (stack.length === 0 || stack.pop() !== c) {
            // 如果是右括号,检查栈是否为空或者是不是预期的右括号
            return false
        }
    }
    return stack.length === 0
};

mpc能够判断是左括号是因为mp里的键都是左括号,如果c是右括号那么mpc是undefined,到if里判断等价于false。

(太神了居然想的是放入对应的右括号)

相关推荐
你怎么知道我是队长5 分钟前
JavaScript的自适应效果
开发语言·javascript·ecmascript
Android系统攻城狮27 分钟前
Linux PipeWire深度解析之pw_context_add_spa_lib调用流程与实战(二十九)
linux·运维·服务器·音频进阶·pipewire音频进阶
shmily麻瓜小菜鸡42 分钟前
前端“伪防盗链”方案
前端·javascript·vue.js·bootstrap·echarts
Dovis(誓平步青云)43 分钟前
《如何在CentOS 7中添加Plex官方软件源:解决文件磁盘难管理难题》
linux·运维·服务器·后端·生成对抗网络·centos
mayaairi43 分钟前
JS数组完全指南(含十大操作详解)
开发语言·前端·javascript
草莓熊Lotso1 小时前
【Linux网络】深入理解Linux IO多路复用:select服务器完善、内核原理与poll实战
linux·运维·服务器·c语言·网络·c++
byte轻骑兵1 小时前
BlueZ源码编译环境配置全指南:Linux桌面原生编译 + 嵌入式ARM交叉编译 + 定制裁剪与调试实战
linux·arm开发·蓝牙·bluez·电脑蓝牙
纪伊路上盛名在1 小时前
NVML ERROR_ RM has detected an NVML_RM version mismatch
linux·数据库·gpu·驱动
醉逍遥_祥1 小时前
Linux进程与NuttX任务(Linux Processes vs NuttX Tasks)
linux·单片机·嵌入式软件
AndyHeee1 小时前
Linux 内核底层机制:设备树(Device Tree)的数据结构与内存组织
linux·前端·数据结构