hihoCoder挑战赛7 正则表达式
来源:互联网 发布:国家数据共享交换平台 编辑:程序博客网 时间:2024/05/01 14:17
如题:http://hihocoder.com/contest/challenge7/problem/1
题目1 : 正则表达式
- 样例输入
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。
dp的题目
dp[i][j]表示区间【i,j】是正则表达式
#include<iostream>
using namespace std;
#include<cstdio>
#include<cstring>
char str[105];
int dp[105][105];
int main()
{
// freopen("C:\\1.txt","r",stdin);
while(~scanf("%s",str+1))
{
memset(dp,0,sizeof(dp));
int i,j,k;
int n=strlen(str+1);
for(i=1;i<=n;i++)
if(str[i]=='0'||str[i]=='1')
dp[i][i]=1;
for(i=2;i<=n;i++)
for(j=1;j+i-1<=n;j++)
{
for(k=j;k<j+i-1&&!dp[j][i+j-1];k++)
if(dp[j][k]&&dp[k+1][i+j-1])
dp[j][i+j-1]=1;
for(k=j+1;k<j+i-1&&!dp[j][i+j-1];k++)
if(str[k]=='|'&&dp[j][k-1]&&dp[k+1][i+j-1])
dp[j][i+j-1]=1;
if(str[j+i-1]=='*'&&dp[j][j+i-2])
dp[j][j+i-1]=1;
if(str[j]=='('&&str[i+j-1]==')'&&dp[j+1][i+j-2])
dp[j][j+i-1]=1;
}
if(dp[1][n])
printf("yes\n");
else
printf("no\n");
}
return 0;
}
- hihoCoder挑战赛7 正则表达式
- hihoCoder挑战赛7 1001 正则表达式 (区间DP)
- hiho 挑战赛7(正则表达式-栈)
- hihoCoder之正则表达式
- hihocoder #1110 正则表达式
- hihocoder 1110 正则表达式
- hihocoder 1110 正则表达式
- hihoCoder 1110 : 正则表达式
- Hihocoder 挑战赛
- hihoCoder挑战赛14-1223
- hihoCoder挑战赛14-1224
- hihoCoder挑战赛20
- hihoCoder挑战赛20 题解
- hihoCoder挑战赛 one
- hihoCoder挑战赛22 笔记
- hihocoder挑战赛20小记
- hihoCoder挑战赛29
- hihoCoder挑战赛12 ABC
- scanf("%s",a)和gets(a)的区别
- 从sql server 2012生成带数据脚本
- linux下如何进入单人维护模式
- mybatis实战教程(mybatis in action),mybatis入门到精通
- PowerDesigner导出表到word
- hihoCoder挑战赛7 正则表达式
- 事务的定义,事务的作用以及Spring事务原理
- 集合遍历(List、Set、Map)
- 显示执行计划的一些方法
- 产品经理如何做竞品分析
- Mysql group by 排序问题
- C:\fakepath\文件路径问题
- poj1789 Truck History 最小生成树
- UITextField