消消乐合集~
20. 有效的括号
var isValid = function(s) {
const map = {
'(': ')',
'[': ']',
'{': '}'
};
const stk = [];
for (const c of s) {
if (Object.keys(map).find((a) => a===c)) {
stk.push(c);
} else {
const last = stk.pop();
if (map[last] !== c) {
return false;
}
}
}
return stk.length === 0;
};
// 用右括号来匹配
for (const c of s) {
if (map[c]) {
stk.push(map[c]);
} else {
if (stk[stk.length-1] !== c) {
return false;
} else {
stk.pop();
}
}
}
1047. 删除字符串中的所有相邻重复项
var removeDuplicates = function(s) {
if (s.length === 1) return s;
const res = [];
for (const c of s) {
if (res.length > 0) {
const last = res.pop();
if (last !== c) {
res.push(last);
res.push(c);
}
} else {
res.push(c);
}
}
return res.join('');
};
150. 逆波兰表达式求值
- 注意点:运算符的顺序很重要;除法是直接截断的
var evalRPN = function(tokens) {
const stk = [];
for (const t of tokens) {
if (!isNaN(+t)) {
stk.push(t);
} else {
const b = +stk.pop();
const a = +stk.pop();
let c = null;
switch(t) {
case '+': {
c = a+b;
break;
}
case '-': {
c = a-b;
break;
}
case '*': {
c = a*b;
break;
}
case '/': {
c = parseInt(a/b);
break;
}
}
stk.push(c);
}
}
return stk.pop();
};