今天的题主要是关于栈的,比较简单,一次性过
20. 有效的括号
讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。
大家先自己思考一下 有哪些不匹配的场景,在看视频 我讲的都有哪些场景,落实到代码其实就容易很多了。
题目链接/文章讲解/视频讲解:https://programmercarl.com/0020.有效的括号.html
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
const stack = [];
const common = {
')':'(',
'}':'{',
']':'[',
}
const common2 = ['(','{','[']
for(let i=0;i<s.length;i++){
if (common2.includes(s[i])) {
stack.push(s[i]);
continue;
}
let last = stack.pop();
if (last!==common[s[i]]) {
return false;
}
}
return stack.length>0?false:true;
};
- 删除字符串中的所有相邻重复项
栈的经典应用。
要知道栈为什么适合做这种类似于爱消除的操作,因为栈帮助我们记录了 遍历数组当前元素时候,前一个元素是什么。
题目链接/文章讲解/视频讲解:https://programmercarl.com/1047.删除字符串中的所有相邻重复项.html
/**
* @param {string} s
* @return {string}
*/
var removeDuplicates = function(s) {
const stack = [s[0]];
for (let i=1;i<s.length;i++) {
if(stack[stack.length-1]===s[i]){
stack.pop();
}else{
stack.push(s[i])
}
}
return stack.join('');
};
- 逆波兰表达式求值
本题不难,但第一次做的话,会很难想到,所以先看视频,了解思路再去做题
题目链接/文章讲解/视频讲解:https://programmercarl.com/0150.逆波兰表达式求值.html
/**
* @param {string[]} tokens
* @return {number}
*/
var evalRPN = function(tokens) {
const stack = [];
for(let i=0;i<tokens.length;i++){
let c = tokens[i];
if (isNaN(Number(c))) {
let fast = stack.pop();
let two = stack.pop();
switch(c){
case '+':
stack.push(fast+two);
break;
case '-':
stack.push(two-fast);
break;
case '*':
stack.push(two*fast);
break;
case '/':
stack.push(two/fast>0?Math.floor(two/fast):Math.ceil(two/fast));
break;
}
console.log(stack)
}else{
stack.push(Number(c));
}
}
return stack[0];
};
标签:11,const,string,随想录,讲解,求值,return,stack
From: https://www.cnblogs.com/yuanyf6/p/18199268