天池 在线编程 布尔表达式求值(栈)
文章目录
- 1. 题目
- 2. 解题
1. 题目
https://tianchi.aliyun.com/oj/245679029019779851/254275128279634588
给定一个字符串代表一个仅包含"true","false","or","and"
的布尔表达式。
你的任务是将这个表达式的值求出,返回"true"或"false"
。
如果该表达式是错误的,则返回"error"
。
数据保证表达式中只含有"true",“false”,“or”,"and"四种字符串。
表达式中的元素不会超过10000个。
示例
样例 1
输入:
"true and false"
输出:
"false"样例 2
输入:
"true or"
输出:
"error"
2. 解题
- 先检查是否是合法表达式,首尾只能是 bool,中间不能有连续的 操作符
- 在用栈记录 bool 值,遇到 and 时,当前 bool 与栈顶 bool 操作,再把结果入栈
- 遇到 or 直接把 bool 值入栈
- 最后栈内的 bool 全部做 or 运算
class Solution {public:/*** @param expression: a string that representing an expression* @return: the result of the expression*/string evaluation(string &exp) {// write your code hereexp += ' ';string prev, cur;unordered_set<string> s1 = {"true", "false"},s2 = {"or", "and"};for(int i = 0; i < exp.size(); i++) {if(exp[i] != ' ')cur += exp[i];else{if((prev=="" || i==exp.size()-1) && (cur=="and" || cur=="or"))return "error";//首尾是操作符if((s1.count(prev)&&s1.count(cur))||(s2.count(prev)&&s2.count(cur)))return "error";//连续的操作数,或者连续的操作符prev = cur;cur = "";}}stack<bool> stk;prev = cur = "";for(int i = 0; i < exp.size(); i++) {if(exp[i] != ' ')cur += exp[i];else{if(prev=="" || prev=="or")stk.push(cur=="true" ? true : false);else if(prev == "and"){bool tp = stk.top();stk.pop();stk.push(tp&&(cur=="true" ? true : false));}prev = cur;cur = "";}}bool ans = stk.top();stk.pop();while(!stk.empty() && ans==false){ans = ans||stk.top();stk.pop();}return ans ? "true" : "false";}
};
50ms C++
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
天池 在线编程 布尔表达式求值(栈)相关推荐
- 【组队学习】【34期】阿里云天池在线编程训练营
阿里云天池在线编程训练营 航路开辟者:陈信达.杨世超.赵子一.马燕鹏 领航员:武帅.初晓宇.叶前坤.邱广坤.朱松青 航海士:宁彦吉.肖桐.汪超.陈信达.杨世超.赵子一.武帅.初晓宇.叶前坤.邱广坤.朱 ...
- POJ 2106 Boolean Expressions (布尔表达式求值)
题意:关于!,&,| 的运算,表达式中V代表true,F代表false. 思路:见代码吧,很详细了. 要注意 !!!F,!(...) 的情况. #include <iostream> ...
- 天池 在线编程 删除字符(单调栈)
文章目录 1. 题目 2. 解题 1. 题目 描述 给定一个字符串str,现在要对该字符串进行删除操作, 保留字符串中的 k 个字符且相对位置不变,并且使它的字典序最小,返回这个子串. 示例 例1: ...
- 天池 在线编程 放小球(动态规划)
文章目录 1. 题目 2. 解题 2.1 动态规划 1. 题目 n 个桶中小球的个数已知, 可以操作 k 次(每次从桶中取出一个球,或者添加一个球), 每个桶有规定的最大容量 W[i]. 求操作后两相 ...
- 天池在线编程 2020年9月26日 日常周赛题解
文章目录 1. K步编辑 2. 折纸 3. 字符串的不同排列 4. 硬币排成线 题目地址,请点这 1. K步编辑 给出一个只含有小写字母的字符串的集合以及一个目标串(target),输出所有可以经过不 ...
- 天池 在线编程 最长AB子串(哈希)
文章目录 1. 题目 2. 解题 1. 题目 描述 给你一个只由字母'A'和'B'组成的字符串s,找一个最长的子串,要求这个子串里面'A'和'B'的数目相等,输出该子串的长度. 这个子串可以为空. s ...
- 天池 在线编程 回文子串(区间动态规划)
文章目录 1. 题目 2. 解题 1. 题目 描述 小明喜欢玩文字游戏,今天他希望在一个字符串的子串中找到回文串. 回文串是从左往右和从右往左读相同的字符串,例如121和tacocat.子串是一个字符 ...
- 天池 在线编程 订单分配(回溯)
文章目录 1. 题目 2. 解题 1. 题目 描述 打车派单场景, 假定有N个订单,待分配给N个司机. 每个订单在匹配司机前,会对候选司机进行打分,打分的结果保存在N*N的矩阵score,其中scor ...
- 天池 在线编程 排名查询
文章目录 1. 题目 2. 解题 1. 题目 描述 给一个二维数组scores表示每个学生的各科成绩,求出学生中总成绩排名第K的索引. 如果成绩一样,越早出现的排名越高. 0 <= scores ...
最新文章
- centos创建vsftpd虚拟用户
- 【每日随笔】电子签名 ( 下载 “e 签保“ 应用 | 使用 手机号 + 短信验证码 登录 | 发起签署 | 签名 | 获取签名后的 PDF 文件及出证信息 )
- php 解析 saml协议,解出SAMLRequest的代码示例
- 36.JVM内存分哪几个区,每个区的作用是什么、如和判断一个对象是否存活、java垃圾回收机制、垃圾收集的方法有哪些、java类加载过程、类加载机制、双亲委派、Minor GC和Major GC
- java8 nio_Java8之 NIO的学习
- Android 系统性能优化(72)-----App启动优化
- 字典写入excel_Excel中“先出式”出货的问题,以后出库太方便了
- Win10正式版激活方法有哪些?如何激活Win10?
- 微信小程序----实现YDUI的ScrollNav组件(滚动导航)
- 台式计算机拆卸步骤,拆装台式电脑主机的方法图解步骤
- 大数据计算技术架构解析
- Roaring BitMap(高效压缩位图)
- 51单片机霍尔测速与PWM调直流电机转速快慢
- 书论55 郝经《移诸生论书法书》
- Web前端:中国环宇科技有限公司网页设计
- 【更新21.02.03】百分浏览器继续使用Flash Player的临时解决方案!
- stm32 cubemx 新建项目一直报错的问题终于解决了
- 人人都会设计模式---建造者模式--Builder
- 特斯拉使用顶级编程语言创建自动驾驶汽车
- [论文学习笔记]01一种轮廓平行扫描算法【3D打印路径规划】