hihoCoder 1110 : 正则表达式
2017-06-07 21:52
267 查看
1110 : 正则表达式
时间限制:1000ms单点时限:1000ms
内存限制:256MB
描述
给定一个字符串,判断其是否为合法的正则表达式。一个正则表达式定义为:
1:0是正则表达式,1也是正则表达式。
2:P和Q都是正则表达式,则PQ是正则表达式。
3:P是正则表达式,则(P)是正则表达式
4:P是正则表达式,则P*也是正则表达式
5:P和Q都是正则表达式,则P|Q是正则表达式。
输入
输入包含多组数据。每组数据为一行一个字符串,长度不超过100。
输出
对于每组数据,如果输入是合法的正则表达式,输出yes,否则输出no。样例输入
010101101* (11|0*)* )*111
样例输出
yes yesno
import java.util.Scanner;
/**
* 正则表达式
*
*/
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()) {
char[] ch = scanner.next().toCharArray();
int n = ch.length;
boolean[][] dp = new boolean[105][105];
for(int i = 0; i < n; i++) {
if(ch[i] == '0' || ch[i] == '1') dp[i][i] = true;
}
//l为正则表达式的长度
for(int l = 1; l< n; l++) {
for(int i = 0; i < n-l; i++) {
int j = i + l;
if(ch[i] == '(' && ch[j] == ')' && dp[i+1][j-1]) dp[i][j] = true;
if(ch[j] == '*' && dp[i][j-1]) dp[i][j] = true;
for(int k = i; k < j; k++) {
a6e2
if(dp[i][k] && dp[k+1][j]) dp[i][j] = true;
if(ch[k] == '|' && k > 0 && dp[i][k-1] && dp[k+1][j]) dp[i][j]= true;
}
}
}
System.out.println(dp[0][n-1] ? "yes" : "no");
}
}
}
相关文章推荐
- hihocoder 1110 正则表达式 (区间dp)
- hihoCoder--1110 正则表达式(区间dp)
- hihocoder 1110 正则表达式
- hihoCoder 1110 正则表达式 (区间dp)
- hihocoder 1110 正则表达式
- hihoCoder挑战赛7 1001 正则表达式 (区间DP)
- 正则表达式的用法
- 正则表达式之全部符号解释
- 正则表达式 \n和\r
- 精通 JS正则表达式
- 文本框正则表达式
- JavaScript 【正则表达式验证数字代码】
- 正则表达式常用用法汇总
- 20个实用正则表达式
- JAVA-25.2-js提高篇、BOM编程、事件编程、DOM编程、js正则表达式、表单验证案例
- 17个经典的正则表达式
- C# 中的常用正则表达式总结
- javascript验证英文的正则表达式
- 正则表达式集合
- 【正则表达式 提高】环视,中文字处理