一、有效的括号
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
if(s.length % 2 === 1) {
return false
}
let stack = []
for(let i = 0; i < s.length;i++) {
switch(s[i]){
case '(':
stack.push(')')
break
case '{':
stack.push('}')
break
case '[':
stack.push(']')
break
default:
if(s[i] !== stack.pop()) {
return false
}
}
}
return stack.length === 0
};
二、删除字符串中的所有相邻重复项
/**
* @param {string} s
* @return {string}
*/
var removeDuplicates = function(s) {
let stack = []
for(let i = 0; i < s.length; i++) {
if(stack[stack.length -1] === s[i]) {
stack.pop()
} else {
stack.push(s[i])
}
}
return stack.join('')
};
三、逆波兰表达式求值
逆波兰表达式是一种后缀表达式,运算符写在后面
/**
* @param {string[]} tokens
* @return {number}
*/
var evalRPN = function (tokens) {
let stack = []
for (let i = 0; i < tokens.length; i++) {
if (Number.isNaN(Number(tokens[i]))) {
let val1 = stack.pop()
let val2 = stack.pop()
if (tokens[i] === '+') {
stack.push(val1 + val2)
} else if (tokens[i] === '-') {
stack.push(val2 - val1)
} else if (tokens[i] === '*') {
stack.push(val2 * val1)
} else if (tokens[i] === '/') {
stack.push(val2 / val1 | 0)
}
} else {
stack.push(Number(tokens[i]))
}
}
return stack[0]
};