232.用栈实现队列
题目链接:. - 力扣(LeetCode)
思路:用栈实现队列的入队,出队,判空,取队头元素
因为栈是后进先出,队列是先进先出,要实现队列要让入栈的元素到栈顶去
两个栈,一个负责in,一个out
入队时,栈in里面直接push
出队时,栈out里面是栈in里面pop过来的,是颠倒的. 如果栈out里面还有元素,就不能再从栈in里面pop过来;如果out为空,则将栈in里面的都移到out里面
取队头元素,也是在out里面取,返回peek即可
判空需要判断两个栈同时为空
Java Stack已经过时 用
Deque<Character> deque = new LinkedList<>();
Deque<>代替Stack. 用于实现堆栈的方法pop(),push(),peek();
225. 用队列实现栈
题目链接:. - 力扣(LeetCode)
思路:队列是先进先出,栈是后进先出,队列实现栈压栈,出栈,栈顶,判空
主要是出栈,栈是后进先出,需要两个队列,需要先搞清楚两个队列分别干什么.queue1负责拿到顺序正确的元素,queue2负责保持顺序正确
入栈:queue1入队元素,同时拿到queue2(之前的元素),然后把queue1给到queue2,保持倒着的顺序
出栈:queue1出栈
栈顶:queue1的队头
判空:queue1.isEmpty()
20. 有效的括号
题目链接:. - 力扣(LeetCode)
思路:括号匹配有几种情况,匹配的情况就是(){}[];不匹配:
- :([})
- ()()))
- (()
采用栈的数据结构,遍历字符串,如果为`([{`,就入栈`)]}`,else if(栈为空(2)或者当前字符不为栈顶字符(3))就false;else就pop;
最后栈为空就true,else false;(3)
1047. 删除字符串中的所有相邻重复项
题目链接:. - 力扣(LeetCode)
文章讲解:代码随想录 (programmercarl.com)
视频讲解: 栈的好戏还要继续!| LeetCode:1047. 删除字符串中的所有相邻重复项_哔哩哔哩_bilibili
思路:用栈解决,遍历字符串,如果栈顶元素等于当前元素,就出栈并continue;当然有几个条件(i>0&&栈不为空).
这种方法需要字符串转字符数组,字符数组转字符串
双指针:快慢两个指针进行操作,慢指针指向结果字符串的尾部下标,快指针进行遍历
while(fast<array.length){
array[slow] = array[fast];
if(slow>0&&array[slow]==array[slow-1]){
slow--;
}else{
slow++;
}
fast ++;
}
if(slow>0&&array[slow]==array[slow-1])遇到相同的slow就后退一步,下一次循环执行`if(slow>0&&array[slow]==array[slow-1])`时就覆盖掉