当前位置: 首页 > news >正文

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

232.用栈实现队列
题目链接:https://leetcode.cn/problems/implement-queue-using-stacks/description/
解题思路:用两个栈实现队列,一个入栈,把入栈里面的元素全部放入出栈
代码实现:

点击查看代码
    def __init__(self):self.stack_in = [] #入栈,主要负责pushself.stack_out = [] #出栈,主要负责peek(查看栈顶元素),pop(推出栈顶元素)def push(self, x):""":type x: int:rtype: None"""self.stack_in.append(x) #有元素进来,就往in里面pushdef pop(self):""":rtype: int"""if self.empty():return None #先检查队列是否为空if self.stack_out: #如果出栈不为空,则直接弹出,只有当出栈里的旧元素全部弹出时,才会接受新元素return self.stack_out.pop()else: #如果为空,遍历入栈,把元素加进出栈for i in range(len(self.stack_in)):self.stack_out.append(self.stack_in.pop())return self.stack_out.pop()def peek(self):""":rtype: int"""#先用pop移除并返回首个元素,再把元素压回stack_outans = self.pop() #运用前面自定义的pop函数,检查了self是否为空的情况并移除了stack_out里面的首个元素self.stack_out.append(ans)return ansdef empty(self):""":rtype: bool"""#只要任何一个栈里有元素,就不为空return not (self.stack_in or self.stack_out)
  1. 用队列实现栈
    题目链接:https://leetcode.cn/problems/implement-stack-using-queues/description/
    解题思路:用一个队列实现栈,要把最后一个元素先推出。做法:把这个元素前面所有元素先推出然后从末端放回
    代码实现:
点击查看代码
    def __init__(self):self.que = deque() #创建一个队列def push(self, x):""":type x: int:rtype: None"""self.que.append(x)def pop(self):""":rtype: int"""if self.empty():return Nonefor i in range(len(self.que)-1): #遍历末端元素前面的所有元素self.que.append(self.que.popleft()) #推出最左侧的,加入到末端return self.que.popleft()def top(self): #获取栈顶元素而不移除""":rtype: int"""if self.empty():return Nonereturn self.que[-1]def empty(self):""":rtype: bool"""return not self.que
  1. 有效的括号
    题目链接:https://leetcode.cn/problems/valid-parentheses/description/
    方法:使用栈进行左右括号的匹配
    解题思路:遍历,遇到什么类型的左括号就将对应的右括号添加到栈,遇到右括号就看是否与栈里的右括号相同,相同则弹出。最后会出现三种情况:左右括号不匹配,有多余左括号,有多余右括号。
    代码实现:
点击查看代码
        stack = []for i in s:if i == '(':stack.append(')')elif i == '[':stack.append(']')elif i == '{':stack.append('}')elif not stack or i != stack[-1]: #遍历过程中出现not stack(栈为空)说明右括号多余return Falseelse:stack.pop()return True if not stack else False #如果最后都消除了,为True,如果还有右括号存在,表明多出了左括号,为False
  1. 删除字符串中的所有相邻重复项
    题目链接:https://leetcode.cn/problems/remove-all-adjacent-duplicates-in-string/description/
    法一:使用栈
    思路:用一个栈存储遍历的元素,如果栈为空或遍历的元素和栈内不一样就放入栈,如果遍历的元素和栈内一样就把栈内元素弹出,最后剩下的就是结果字符
    代码:
点击查看代码
         res = list()for i in s:if res and res[-1] == i:res.pop()else:res.append(i)return ''.join(res) #从列表的第一个元素开始连接字符串

法二:用双指针模拟栈
思路:快慢指针指向起点,快指针遍历的值赋给慢指针,如果遇到值和之前一样的情况则慢指针后退一格,快指针之后遍历的元素覆盖掉此时慢指针指向的元素
代码:

点击查看代码
        slow, fast =0, 0res = list(s)while fast < len(res):res[slow] = res[fast]if slow > 0 and res[slow] == res[slow-1]: #slow要有前值才能比较,slow>0,从第二项开始slow -= 1else:slow += 1fast += 1return ''.join(res[:slow]) #最终slow指向末尾的下一个位置,所以索引是0:slow,取不到slow

各题手绘示意图:
650d97137e706a14ad70f6a7b3151edd
2a475ba44cdfe4cbe71a2cd8ea40a45c
db06d42e9b15b16e8ed9362989c9f0bb
381c6346fe959964df078860ba1ddbf5

http://www.sczhlp.com/news/93903/

相关文章:

  • 故障处理:access$表在数据库丢失的恢复
  • 企业网站 模版平面设计培训多少钱 贵吗
  • 要看网站是多少太原seo服务
  • 中山营销型网站建设凡科登录入口app下载
  • 个人网站logo移动网站建设信息
  • 域名备案成功怎么做网站江苏省和住房城乡建设厅网站
  • seo撰写网站标题以及描述的案例网络站点推广的方法有哪些
  • 给公司做个网站多少钱app设计思路
  • 网站修改关键字开发施工建设网站审核
  • ui设计网站成品图片网站切图规范
  • 从需求出发:教你判断选斑斑还是织信
  • PLC结构化文本设计模式——建造者模式(Builder Pattern)
  • C++ - STL - 迭代器
  • MATLAB的智能扫地机器人工作过程仿真
  • 江西省网站开发制作精美网站建设口碑好
  • 传奇高端网站设计制作南昌集团网站建设公司
  • 汽车电子商务网站建设北京哪个网站做兼职比较好
  • 有什么做兼职的医疗网站沙井网站设计
  • 阿凡达网站建设网资讯文章网站模板
  • linux redis 8.2.1软件开机启动redis.service与etc下的rc.local配置2种方式
  • 在GA中添加Tag-GetDynamicSpecSourceTags().AddTag(NewTag)
  • 浪漫网站建设新乡营销型网站
  • 深圳实惠的专业建站公司wordpress菜单导航图标图片大全
  • 河北电子商务网站建设自我介绍网页模板代码
  • 注册公司上什么网站做网站要不要学ps
  • 佛山家居网站全网营销包装设计展开图图片
  • 广西麒铭建设有限公司网站中通建设工程管理公司网站
  • 佛山市企业网站seo点击软件仿知乎 wordpress
  • app要有网站做基础知识wordpress kallyas
  • python如何在函数中使用全局变量?