代码随想录Day11打卡
-
- 20 有效的括号
- 1047 删除字符串中的所有相邻重复项
- 150 逆波兰表达式求值
20 有效的括号
20 有效的括号
//20 有效的括号
var isValid = function(s) {//栈
let stack = [];
let map = {
'(': ')',
'[': ']',
'{': '}'
}
for (let i = 0; i < s.length; i++) { //遍历字符串
if (s[i] in map) { //如果是左括号
stack.push(s[i]);
} else { //如果是右括号
let t = stack.pop();
if (map[t] !== s[i]) { //如果不匹配
return false;
}
}
}
if (stack.length !== 0) { //如果栈不为空
return false;
}
return true;
}
var isValid = function(s) {
//思路:遇到左括号就入栈,遇到右括号就出栈,如果出栈的元素和右括号不匹配,就返回false,
//如果最后栈不为空,也返回false
let stack = [];
let map = { // 哈希表
"(": ")",
"[": "]",
"{": "}"
}
for (let i = 0; i < s.length; i++) {
if (map[s[i]]) {
stack.push(s[i]);
} else {
if (map[stack.pop()] !== s[i]) {
return false;
}
}
}
return stack.length === 0;
};
1047 删除字符串中的所有相邻重复项
1047 删除字符串中的所有相邻重复项
//1047 删除字符串中的所有相邻重复项
var removeDuplicates = function(S) {//栈
let stack = [];
for (let i = 0; i < S.length; i++)
if (stack.length === 0 || stack[stack.length - 1] !== S[i]) {
stack.push(S[i]);
} else {
stack.pop();
}
}
return stack.join('');
}
150 逆波兰表达式求值
150 逆波兰表达式求值
//150 逆波兰表达式求值
var evalRPN = function(tokens) {//栈
let stack = [];
for (let i = 0; i < tokens.length; i++) { //遍历数组
if (tokens[i] === '+') { //如果是加号就弹出两个数相加
let a = stack.pop();
let b = stack.pop();
stack.push(b + a);
} else if (tokens[i] === '-') { //如果是减号就弹出两个数相减
let a = stack.pop();
let b = stack.pop();
stack.push(b - a);
} else if (tokens[i] === '*') { //如果是乘号就弹出两个数相乘
let a = stack.pop();
let b = stack.pop();
stack.push(b * a);
} else if (tokens[i] === '/') { //如果是除号就弹出两个数相除
let a = stack.pop();
let b = stack.pop();
stack.push(parseInt(b / a));
} else {
stack.push(parseInt(tokens[i]));
}
}
return stack[0];
}