码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 学院打卡第十四天


    今天是一道困难题,难得有困难题!!

    如题:

    但是这个困难题感觉也不是很”困难“!!!

    算法思想:

    第一感觉就是利用栈的思想,这种题做多了,一看见就是想到栈!!!果然真行!!!

    ---初始化2个栈,一个symbol装运算符!,&,|。一个nums装括号以及t,f。

    ---然后遍历字符串

    ---当遇到逗号  ,  直接跳过 

    ---遇到运算符,直接装入symbol

    ---当遇到   (   、 t、    和  f  直接装入nums栈中,t和f要分别转换为True和False装入!

    ----遇到右括号 )   就要分情况讨论了!!!!

                   (1)symbol栈出一个元素,如果是 !,那么nums肯定只要出一个字符和左括号进行not 运算

                    (2)如果是&则定义num初始值为True,如果是|则定义初始值为False,然后对nums进行出栈操作直到栈顶为左括号,每出来一个与num进行对应的运算并且重新赋值给num

                    (3)最后把左括号出栈,把得出的结果num再入栈

    ---结束循环的时候,返回nums中的第一个元素(也只剩一个元素了!)

    代码:(有一些细节在代码注释里提到!)

    1. class Solution:
    2. def parseBoolExpr(self, expression: str) -> bool:
    3. nums, symbols = [], []
    4. for i in expression:
    5. if i == "&" or i == "|" or i == "!":
    6. symbols.append(i)
    7. elif i == ",":
    8. continue
    9. else:
    10. if i == ")":
    11. sym = symbols.pop()#先得出运算符
    12. if sym=="!":
    13. num=not nums.pop()
    14. elif sym=="&":
    15. num=True
    16. while len(nums)!=0 and nums[-1]!="(":
    17. num=nums.pop() and num#nums.pop()要放前面,防止num是false直接跳过nums.pop()进入死循环!
    18. else:
    19. num=False
    20. while len(nums)!=0 and nums[-1]!="(":
    21. num=nums.pop() or num #nums.pop()要放前面,防止num是true直接没有去nums.pop()进入死循环!!!!
    22. nums.pop()#左括号出栈
    23. nums.append(num)#结果入栈
    24. else:
    25. if i=="f":
    26. nums.append(False)
    27. elif i=="t":
    28. nums.append(True)
    29. else:
    30. nums.append(i)
    31. return nums[0]

    运行结果:

    今天的打卡完成啦!!!

  • 相关阅读:
    亚马逊鲲鹏系统批量注册功能可以让你快速拥有大量亚马逊买家号
    初识golang微服务框架kratos
    10分钟学会pandas库之一(查看和选择)
    Web服务(12)——Tomcat管理
    java计算机毕业设计宠物店管理系统MyBatis+系统+LW文档+源码+调试部署
    【收藏】window、mac、linux的ip、路由与dns配置教程
    杰理的蓝牙芯片的key是什么?以及该如何添加key?杰理key文件原理
    jQuery学习:onload和read区别(时间早晚 监听个数)
    Spring进阶(五):其他
    大数据请把文章推给想了解DLL的人
  • 原文地址:https://blog.csdn.net/m0_58803171/article/details/127702633
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号