用栈实现队列
leetcode链接:leetcode.cn/problems/im…
用两个栈实现队列思路:
用队列实现栈
leetcode链接:leetcode.cn/problems/im…
用一个队列实现栈思路:
元素出队列后,又添加到队列的里面,直到最后一个的时候直接弹出
有效的括号
leetcode链接:leetcode.cn/problems/va…
思路:
- 遇到右括号入栈
- 遇到左括号就出栈
- 出栈后要判断出栈的元素与左括号类型匹不匹配
var isValid = function(s) {
let size = s.length;
let stack = [];
let map = {
')': '(',
'}': '{',
']': '['
}
for (let i = 0; i < size; i++) {
// 遇到右括号入栈
if (s.charAt(i) === '(' || s.charAt(i) === '[' || s.charAt(i) === '{') {
stack.push(s.charAt(i));
} else {
// 遇到左括号就出栈
let temp = stack.pop();
// 出栈后要判断出栈的元素与左括号类型匹不匹配
if (temp !== map[s.charAt(i)]) {
return false;
}
}
}
return !stack.length;
};
可以尝试其他的思路(遇到右括号则左括号入栈)
删除字符串中的所有相邻重复项
leetcode链接:leetcode.cn/problems/re…
栈适合这类消消乐的操作,因为栈帮助我们记录了遍历数组当前元素时候,前一个元素是什么
思路:
- 元素在入栈前判断与栈顶元素是否相同
- 不相同则入栈
- 相同,不入栈,执行pop操作
var removeDuplicates = function(s) {
let stack = [];
let size = s.length;
for (let i = 0; i < size; i++) {
if (s.charAt(i) !== stack[stack.length - 1]) {
stack.push(s.charAt(i));
} else {
stack.pop();
}
}
return stack.join('');
};