本文已参与[新人创作礼]活动,一起开启掘金创作之路。
刚开始学习算法,看到这种概念,不知道学这个干什么用。在我们写的模版字符串中,有关于闭合标签的判断,比如
<template>
<div>
<p></p>
</div>
</template>
那么在判断的时候,先把不带/的标签放入栈中,有闭合标签时候从栈pop出一个数据,看看是不是最近的闭合。上例中,先在数组stack中,push进去template、div、p,如果pop的第一个p,可以和/p闭合,就视为true,这样一层一等的剥离,直到stack为空,就全部闭合。
力扣20-有效的括号
/**
* @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-简化路径
/**
* @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('/')
};