正则表达式(栈的应用)
来源:互联网 发布:淘宝店铺 武汉飞鱼运动 编辑:程序博客网 时间:2024/06/15 23:57
题目:
给定一个字符串S,判断其是否为合法的正则表达式
一个正则表达式定义:(此正则表达式非正规)
- 0是正则表达式,1是正则表达式
- P和Q是正则表达式,则PQ是正则表达式
- P是正则表达式,则(P)是正则表达式
- P是正则表达式,则P*是正则表达式
- P和Q是正则表达式,则P|Q是正则表达式
输入样例:
010101101*
(11|0*)*
)*111
#
输出样例:
YES
YES
NO
题解:
用一个栈来存储出现的(和|,遇到)判断此时是否合法,检查栈的)符号。遇到|或(,将当前字符串的起始位置设置为这个位置,用一个bool标记当前串是否为合法。(解释不清楚,看代码,,,)
代码:
#include<cstdio>#include<cstring>const int MAXN=10000010;char str[MAXN];int top;char op[MAXN];int main(){ int n; bool success; while(~scanf("%s",str)) { if(str[0]=='#') break; top=0; success=0; n=strlen(str); for(int i=0;i<n;i++) { if(str[i]=='0'||str[i]=='1') success=1; else if(str[i]=='(') { op[top]='('; success=0; } else if(str[i]==')') { while(success&&op[top]!='('&&top>0) top--; if(!success) break; if(top!=0&&op[top]=='(') top--; else { success=0; break; } } else if(str[i]=='*') { if(!success) break; } else if(str[i]=='|') { if(!success) break; op[top]='|'; success=0; } else { success=0; break; } } while(top) { if(op[top]=='|'&&success) top--; else { success=0; break; } } if(success) printf("YES\n"); else printf("NO\n"); } return 0;}
另一做法:
阅读全文
1 0
- 正则表达式(栈的应用)
- 正则表达式的应用
- 正则表达式的应用
- 正则表达式的应用
- 正则表达式的应用
- 正则表达式的应用
- 正则表达式 的应用
- 正则表达式的应用
- 正则表达式的应用
- 正则表达式的应用
- 正则表达式的应用
- 正则表达式的应用
- 正则表达式的应用
- 正则表达式的应用
- 正则表达式的应用
- 正则表达式的应用
- 正则表达式的应用
- 正则表达式的应用
- 解决 Jetson Tk1启动 rviz 仿真 Segmentation fault
- 23种设计模式(3/4)-工厂模式(简单工厂模式/工厂方法模式/抽象工厂模式)
- [NOIP2017模拟]随机图
- LINQ
- angular 自定义服务
- 正则表达式(栈的应用)
- log4plus配置文件放到中文路径加载失败
- centos 使用mail发送邮件
- C# 中的委托和事件
- 文章标题
- Comet工作原理
- SpringBoot使用教程【1】Restful API设计 返回json,xml格式
- MyBatis Spring整合配置映射接口类与映射xml文件
- Android 内置google dialer后发现拨号后,没有通话界面显示。