代码随想录第十一天| 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值

20.有效的括号

思路:建一个栈存放括号
如果遇到左括号,就向栈内加对应的右括号
如果遇到右括号,就删除栈顶对应的右括号
一共有三种错误情况:

  1. 栈内最后不为空,即多加了左括号
  2. 发现不匹配的括号
  3. 字符串没遍历完,栈就空了。即多加了右括号
    在这里插入图片描述

1047.删除字符串中的所有相邻重复项

使用栈。栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素
然后再去做对应的消除操作。 如动画所示:
在这里插入图片描述
从栈中弹出剩余元素,此时是字符串ac,因为从栈里弹出的元素是倒序的,所以在对字符串进行反转一下,就得到了最终的结果。
或者可以拿字符串直接作为栈,这样省去了栈还要转为字符串的操作。

150.逆波兰表达式求值

逆波兰表达式:是一种后缀表达式,所谓后缀就是指算符写在后面。
平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 ) 。
该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * ) 。
逆波兰表达式主要有以下两个优点:

  • 去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 + * 也可以依据次序计算出正确结果。
  • 适合用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中。
    逆波兰表达式相当于是二叉树中的后序遍历
    思路:
    遇见数字就加入到栈里,遇见操作符就从栈中取出元素做计算,再把数字加入到栈里
    栈非常擅长做相邻字符这种消除的操作
    这道题需要注意的是,num1是st.top(),num2是pop()之后的st.top(),我们应该是num2/num1,切记不要反了
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值