Day4-栈

108 阅读1分钟

本文已参与[新人创作礼]活动,一起开启掘金创作之路。

刚开始学习算法,看到这种概念,不知道学这个干什么用。在我们写的模版字符串中,有关于闭合标签的判断,比如

<template>
    <div>
        <p></p>
    </div>
</template>

那么在判断的时候,先把不带/的标签放入栈中,有闭合标签时候从栈pop出一个数据,看看是不是最近的闭合。上例中,先在数组stack中,push进去template、div、p,如果pop的第一个p,可以和/p闭合,就视为true,这样一层一等的剥离,直到stack为空,就全部闭合。

力扣20-有效的括号

image.png

image.png

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    let stack = []
    const obj = {
        '(': ')',
        '{': '}',
        '[': ']'
    }
    for (let i = 0; i < s.length; i++) {
        let ele = s[i]
        // 判断字符是否在左边,在就push到stach中
        if (ele in obj) {
            stack.push(ele)
        } else {
            // 字符不在左边,判断下,在不在右边
            if (ele !== obj[stack.pop()]) {
                return false
            }
        }
    }
    // 当stack全部pop出去后,则为空数组了,就证明闭合
    return !stack.length
};

力扣71-简化路径

image.png

image.png

/**
 * @param {string} path
 * @return {string}
 */
var simplifyPath = function(path) {
    const stack = []
    const paths = path.split('/')
    paths.forEach(item => {
        if (item =='..'){
            stack.pop()
        } else if(item && item !== '.') {
            stack.push(item)
        }
    })
    return '/'+stack.join('/')
};

参考:github.com/course-dash…