hihocoder 1110 正则表达式
来源:互联网 发布:java打印word文档 编辑:程序博客网 时间:2024/05/22 09:01
#1110 : 正则表达式
时间限制:1000ms
单点时限:1000ms
内存限制:256MB
- 样例输入
010101101*(11|0*)*)*111
- 样例输出
yesyesno
描述
给定一个字符串,判断其是否为合法的正则表达式。
一个正则表达式定义为:
1:0是正则表达式,1也是正则表达式。
2:P和Q都是正则表达式,则PQ是正则表达式。
3:P是正则表达式,则(P)是正则表达式
4:P是正则表达式,则P*也是正则表达式
5:P和Q都是正则表达式,则P|Q是正则表达式。
输入
输入包含多组数据。
每组数据为一行一个字符串,长度不超过100。
输出
对于每组数据,如果输入是合法的正则表达式,输出yes,否则输出no。
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn = 105;int f[maxn][maxn];char s[maxn];bool dfs(int i,int j,int &p){ if(i>j) return false; if(s[i]=='*'||s[i]=='|'||s[i]==')') return false; for(;p<=j;p++) { if(s[p]=='*'||s[p]=='0'||s[p]=='1') continue; else if(s[p]=='(') { p++; if(dfs(p,j,p)) { if(s[p]==')') continue; else return false; } return false; } else if(s[p]==')') return true; else if(s[p]=='|') { if(s[p+1]=='*'||s[p+1]=='|'||s[p+1]==')') return false;//这里有问题 } else return false; } return true;}int main(){ // freopen("in.txt","r",stdin); while(~scanf("%s",s)) { memset(f,-1,sizeof(f)); int len=strlen(s); int k=0; bool ans=dfs(0,len-1,k); if(k<len-1) ans=false; if(ans) printf("yes\n"); else printf("no\n"); } return 0;}
这一题我和网上一些人的思路不一样,刚开始我以为用我这个方法会有很多特例,所以这一题拖了数月,今天稍微有点闲,便试了一下,发现还好(其实是数据比较弱),不是很复杂。
0 0
- hihocoder #1110 正则表达式
- hihocoder 1110 正则表达式
- hihocoder 1110 正则表达式
- hihoCoder 1110 : 正则表达式
- hihoCoder 1110 正则表达式 (区间dp)
- hihocoder 1110 正则表达式 (区间dp)
- hihoCoder--1110 正则表达式(区间dp)
- hihoCoder之正则表达式
- hihoCoder挑战赛7 正则表达式
- hihoCoder挑战赛7 1001 正则表达式 (区间DP)
- hihocoder #1110 : 正则表达 区间dp
- 【正则表达式】正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- IOS开发 - KVC和KVO的使用
- 嵌入式 多线程下变量-原子操作__sync_fetch_and_add等等
- 2015 11 04 函数指针
- spring的四种注入方式
- 【LeetCode OJ 003】Longest Substring Without Repeating Characters
- hihocoder 1110 正则表达式
- poj1163 dp the triangle
- 删数字nyoj448
- Rust基础笔记:闭包
- 2015 11 05 枚举
- 堆排序算法之Java实现
- 【OpenCV】角点检测
- Linux内存
- C#中Math.Round()实现中国式四舍五入