有效的括号
- 快手一面遇到过
var isValid = function(s) {
const stack = []
for(let i of s) {
switch(i) {
case '(':
stack.push(')')
break;
case '{':
stack.push('}')
break;
case '[':
stack.push(']')
break;
default:
if(stack.pop() !== i) return false
}
}
return !stack.length
};
删除字符串中的所有相邻重复项
var removeDuplicates = function(s) {
const stack = []
for(let i of s) {
if(!stack.length) {
stack.push(i)
} else {
const node = stack.pop()
if(node === i) continue
stack.push(node)
stack.push(i)
}
}
return stack.join('')
};
逆波兰表达式求值
var evalRPN = function(tokens) {
const stack = []
let left = null, right = null
for(let i of tokens) {
switch(i) {
case '+':
right = Number(stack.pop())
left = Number(stack.pop())
stack.push(left + right)
break;
case '-':
right = Number(stack.pop())
left = Number(stack.pop())
stack.push(left - right)
break;
case '*':
right = Number(stack.pop())
left = Number(stack.pop())
stack.push(left * right)
break;
case '/':
right = Number(stack.pop())
left = Number(stack.pop())
stack.push(left / right | 0)
break;
default:
stack.push(i)
}
}
return stack.pop()
};
总结:这3道都是利用辅助栈,遍历实现