【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。

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

相关推荐
未济3 天前
linux 配置环境变量
linux
傲世仙尊3 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
三十而立洋3 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁3 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
_艾伦 耶格尔.3 天前
进程间通信
linux
李少兄3 天前
JavaScript 隐式全局变量解析
javascript
旖旎夜光3 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
Liuqy-053 天前
Linux IO编程——静态库、动态库
linux
彧azz3 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
-梅3 天前
linux(8) 软硬链接
linux·运维·服务器