表达式的合法判断
来源:互联网 发布:mysql 更新字段加一 编辑:程序博客网 时间:2024/05/01 18:22
题目:
表达式合法判断
写一段代码,判断一个包括’{‘,’[‘,’(‘,’)’,’]’,’}’的表达式是否合法(注意看样例的合法规则。)
给定一个表达式A,请返回一个bool值,代表它是否合法。 测试样例: “[a+b*(5-4)]{x+b+b({1+2)}}”
返回:true 测试样例: “[a+b*(5-4)]{x+b+b(({1+2)}}” 返回:false
分析:
1、通过用例可以判断出,不用纠结三种括号的对应,只要求正括号和反括号对应即可。
2、用栈来解决这个问题非常适合。
// int *array = new int[n];//设立一个栈 int top = 0;//栈顶指针 …… else if (c == 1){//当找到正括号时,入栈// array[top] = c; top++; } else if(c == 2){//当找到反括号时,出栈 top--; if (top < 0){//注意溢出,反括号比正括号多时// delete array; return false; } } …… //注意删除动态数组// delete array; if(top==0){//栈顶指针归零,代表括号成对或没有找到过括号 return true; } else{//不成对 return false; } ……
后来发现把栈数组删掉也毫不影响,只需要用top计数就可以。
是不是简洁多了
class ChkExpression {public: bool chkLegal(string A) { int n = A.length(); int top = 0;//栈顶指针 int i; for (i = 0; i < n; i++){ int c = isBracket(A[i]); if (c == 0){ continue; } else if (c == 1){ top++; } else if(c == 2){ top--; if (top < 0){//反括号比正括号多 return false; } } } if(top==0){ return true;//成对 } else{ return false;//不成对 } }
3、专门写一个成员方法识别括号。
int isBracket(char a){ if (a == '{' || a == '[' || a == '('){ return 1; } else if (a == '}' || a == ']' || a == ')'){ return 2; } else{ return 0; } }
0 0
- 表达式的合法判断
- 使用正则表达式判断合法的电话号码
- 使用正则表达式判断合法的电话号码
- 使用正则表达式判断合法的电话号码
- 正则表达式判断合法的电话号码
- 表达式合法判断
- 表达式合法判断
- 【Stack】表达式合法判断
- 正则表达式判断合法IP
- [编程题]表达式合法判断
- 正则表达式 判断 邮件名合法
- 华为机试---表达式合法判断
- 《去哪网编程题》表达式合法判断
- 牛客网---2016---去哪儿表达式合法判断
- 判断合法的压缩字符
- 判断用户输入的数字是一个合法的电话号码的正则表达式
- 自己动手写一个判断网址合法的C/C++的正则表达式程序
- 实现使用正则表达式来判断指定的字符串是否是合法的E-mail地址
- Java的clone方法 prototype
- 微信URL有效性验证
- django 注册、登录及第三方接口程序(1):基础知识
- CSS定位属性之间的相互作用
- Xfire Nested exception is org.codehaus.xfire.fault.XFireFault:Couldn't send message.
- 表达式的合法判断
- Java类中字段和方法的初始化顺序(包含static)
- Linux_Prgramming_Link_Library
- GridControl中的checkBox用法
- UISwitch简单用法和监听动画(类似QQ电话)实时显示
- 关于隐藏iOS9键盘上新增的快捷方式工具条Shotcuts
- 如何对 网页的加载 进行 性能优化
- 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数。
- 浅谈服务器架构之爆服页游