代码随想录算法刷题训练营第九天 | 232.用栈实现队列 225. 用队列实现栈 20. 有效的括号 1047. 删除字符串中的所有相邻重复项

232.用栈实现队列

题目链接:. - 力扣(LeetCode)

文章讲解:代码随想录 (programmercarl.com)

视频讲解:栈的基本操作! | LeetCode:232.用栈实现队列_哔哩哔哩_bilibili

 思路:用栈实现队列的入队,出队,判空,取队头元素

因为栈是后进先出,队列是先进先出,要实现队列要让入栈的元素到栈顶去

两个栈,一个负责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)

文章讲解:代码随想录 (programmercarl.com)

视频讲解: 队列的基本操作! | LeetCode:225. 用队列实现栈_哔哩哔哩_bilibili

 思路:队列是先进先出,栈是后进先出,队列实现栈压栈,出栈,栈顶,判空

主要是出栈,栈是后进先出,需要两个队列,需要先搞清楚两个队列分别干什么.queue1负责拿到顺序正确的元素,queue2负责保持顺序正确

入栈:queue1入队元素,同时拿到queue2(之前的元素),然后把queue1给到queue2,保持倒着的顺序

出栈:queue1出栈

栈顶:queue1的队头

判空:queue1.isEmpty()

20. 有效的括号

题目链接:. - 力扣(LeetCode)

文章讲解:代码随想录 (programmercarl.com)

视频讲解:栈的拿手好戏!| LeetCode:20. 有效的括号_哔哩哔哩_bilibili

 思路:括号匹配有几种情况,匹配的情况就是(){}[];不匹配:

  1. :([})
  2. ()()))
  3. (()

采用栈的数据结构,遍历字符串,如果为`([{`,就入栈`)]}`,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])`时就覆盖掉

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值