正则问题

考虑一种简单的正则表达式:

只由 x ( ) | 组成的正则表达式。

小明想求出这个正则表达式能接受的最长字符串的长度。

例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。

输入

一个由x()|组成的正则表达式。输入长度不超过100,保证合法。

输出

这个正则表达式能接受的最长字符串的长度。

例如,

输入:

((xx|xxx)x|(x|xx))xx

程序应该输出:

6

资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗 < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

不要使用package语句。不要使用jdk1.7及以上版本的特性。

主类的名字必须是:Main,否则按无效代码处理。

PS:

本题栈的基础应用 思路很简单 ‘(’ ‘x’ ‘|’ 入栈 碰见‘)’然后出栈

出栈的时候 把他们连一起 然后用‘|’进行切割 模拟或运算

留下最长的那个字符串 入栈 最后所有的东西都出栈

在进行上面的操作 不过本题比较坑 括号有不是成对的 吐槽一下 什么破语法

第二个有点问题,错误的我建议也看看,省的下次犯

import java.util.Scanner;

public class 正则问题 {
static int count;
static char[] a = new char[200];
static int p;
static int max =-1;; public static void main(String[] args) {
Scanner in = new Scanner(System.in);
a = in.next().toCharArray();
dfs();
System.out.println(max);
} static int dfs() {
int xnum = 0;
int maxx = 0; while (p < a.length) {
max=Math.max(xnum, max);
max=Math.max(maxx, max);
if (a[p] == 'x') {
p++;
xnum++;
} else if (a[p] == '(') {
p++;
xnum += dfs();
} else if (a[p] == ')') {
p++;
break;
} else if (a[p] == '|') {
p++;
maxx=Math.max(xnum, maxx);
// max=Math.max(maxx, max);
//maxx = Math.max(xnum, maxx);
xnum = 0;
}
max=Math.max(xnum, max);
// max=Math.max(maxx, max);
}
return Math.max(xnum, maxx);
}
}
import java.io.File;
import java.io.FileNotFoundException;
import java.text.ParseException;
import java.util.Scanner; /** * 采用DFS,从前到后遍历遇到(就开始新的搜索,遇到)则停止搜索并通过比较,找出这个括号里的最大值;
* 如果遇到|,则需要记录之前的长度,用于在之后)的比较。遇到x,长度加一,且继续往下找
*
每一个()都是一次dfs,可返回期间最大x数量
*/
public class 编程7正则问题 {
// static Scanner in = new Scanner(System.in);
static int count;
static char[] a = new char[200];
static int p; public static void main(String[] args) throws ParseException, FileNotFoundException {
Scanner in = new Scanner(new File("src/JavaA/s8/7.txt"));
a = in.next().toCharArray();
System.out.println(dfs());
} static int dfs() {
int xnum = 0;
int maxx = 0; while (p < a.length) {
if (a[p] == 'x') {
p++;
xnum++;
} else if (a[p] == '(') {
p++;
xnum += dfs();
} else if (a[p] == ')') {
p++;
break;
} else if (a[p] == '|') {
p++;
maxx=xnum;
//maxx = Math.max(xnum, maxx);
xnum = 0;
}
}
return Math.max(xnum, maxx);
}
}

Java实现第八届蓝桥杯正则问题的更多相关文章

  1. Java实现第八届蓝桥杯购物单

    购物单 题目描述 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打 ...

  2. Java实现第八届蓝桥杯国赛 数字划分

    标题:数字划分 w星球的长老交给小明一个任务: 1,2,3-16 这16个数字分为两组. 要求: 这两组数字的和相同, 并且,两组数字的平方和也相同, 并且,两组数字的立方和也相同. 请你利用计算机的 ...

  3. Java实现第八届蓝桥杯图形排版

    标题:图形排版 小明需要在一篇文档中加入 N 张图片,其中第 i 张图片的宽度是 Wi,高度是 Hi. 假设纸张的宽度是 M,小明使用的文档编辑工具会用以下方式对图片进行自动排版: 1. 该工具会按照 ...

  4. Java实现第八届蓝桥杯魔方状态

    魔方状态 题目描述 二阶魔方就是只有2层的魔方,只由8个小块组成. 如图p1.png所示. 小明很淘气,他只喜欢3种颜色,所有把家里的二阶魔方重新涂了颜色,如下: 前面:橙色 右面:绿色 上面:黄色 ...

  5. Java实现第八届蓝桥杯青蛙跳杯子

    青蛙跳杯子 题目描述 X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色. X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去. 如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里 ...

  6. Java实现第八届蓝桥杯兴趣小组

    兴趣小组 为丰富同学们的业余文化生活,某高校学生会创办了3个兴趣小组 (以下称A组,B组,C组). 每个小组的学生名单分别在[A.txt],[B.txt]和[C.txt]中. 每个文件中存储的是学生的 ...

  7. Java实现第八届蓝桥杯外星日历

    外星日历 题目描述 某星系深处发现了文明遗迹. 他们的计数也是用十进制. 他们的文明也有日历.日历只有天数,没有年.月的概念. 有趣的是,他们也使用了类似"星期"的概念, 只不过他 ...

  8. java实现第八届蓝桥杯生命游戏

    生命游戏 题目描述 康威生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 这个游戏在一个无限大的2D网格上进行. 初始时,每个小方格中居住着一个活着或死了的细胞. 下一时刻每个细胞的 ...

  9. Java实现第八届蓝桥杯9算数式

    9算数式 题目描述 观察如下的算式: 9213 x 85674 = 789314562 左边的乘数和被乘数正好用到了1~9的所有数字,每个1次. 而乘积恰好也是用到了1~9的所有数字,并且每个1次. ...

随机推荐

  1. jquery-----ajax的几种方法

    $.get(url,function(data,status){ if(status == 'success'){ layer.msg(data,{shift:1,time:2000},functio ...

  2. 基于Redis的Nginx服务器集群session共享

    原料:jdk1.8,tomcat7,nginx1.16,Redis3.2.100,Redis-Tomcat需要的jar包,基于windows7. Redis3.2.100与Redis-Tomcat需要 ...

  3. 如何用尾插法建立双链表(C语言,非循环)

    如何用尾插法建立双链表 其实本来是想完成汪队给的链表快排的作业,但是我写完建立双链表以后就12点了龟龟,明天还要早起QAQ,我菜死了 一,为啥要有双链表 先说单链表吧单链表长这样 他的一个结点结构就是 ...

  4. 最简单的git 用法

    步骤 在机器上ssh-keygen 然后把id_rsa.pub 复制到csdn 的公钥上去. git clone git@code.csdn.net:aca_jingru/zabbix.git 如果这 ...

  5. Java多线程相关面试题及答案-整理

    1.什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对 运算密集型任务提速.比如,如果一个线程完成 ...

  6. redis python操作

    1.基于连接池方式实现对五个数据类型操作,每种数据类型2个操作 2.基于spring-data-redis 基于jedis来实现对五种数据类型操作,每种数据类型实现两个操作,包括事务 以上为基于jav ...

  7. python3.x 基础四:json与pickple

    每次打开一个文件,只dump1次 json.dump(dump的内容,文件句柄) json.load(文件句柄) json可以处理列表/字典/字符串等简单数据类型,但是不能处理复杂的数据类型,如函数的 ...

  8. MVC4.0 上传文件

    Views/Import/ImportExcel.cshtml @{ Layout = null;} <!DOCTYPE html> <html><head> &l ...

  9. 多线程(thread+queue 售票)

    一.理解 如果线程里每从队列里取一次,但没有执行task_done(),则join无法判断队列到底有没有结束,在最后执行个join()是等不到结果的,会一直挂起.可以理解为,每task_done一次 ...

  10. HTTP——无状态协议理解

    无状态服务器是指一种把每个请求作为与之前任何请求都无关的独立的事务的服务器. HTTP是一个属于应用层的面向对象的协议 ------未完待续