Java实现第八届蓝桥杯正则问题

摘要:
正则问题考虑一种简单的正则表达式:只由x()|组成的正则表达式。输入长度不超过100,保证合法。输出这个正则表达式能接受的最长字符串的长度。例如,输入:xx程序应该输出:6资源约定:峰值内存消耗˂256MCPU消耗˂1000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入…”所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。不要使用package语句。不要使用jdk1.7及以上版本的特性。主类的名字必须是:Main,否则按无效代码处理。
正则问题

考虑一种简单的正则表达式:
只由 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实现第八届蓝桥杯正则问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Golang HTTP文件上传CentOS 7.8 搭建LNMP(Linux+Nginx+MySQL+PHP)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

xxxx(四):接受消息hook地址分析

   今天来分析一下xxxx接受消息的call;测试的账号在虚拟机,发消息的账号在物理机;    1、老规矩:逆向分析的起点都从CE开始;给测试账号发送辨识度高的消息,这时暂时不要在测试账号打开消息。因为此时的消息刚经过网络传输,还是ASCII格式,所以千万不要勾选UTF-16,只能找ASCII码找(下面详细解释原因)!  重复发送0000000000、...

表示不同文件类型的魔术数字

这里所说的表示不同文件类型的魔术数字,指定是文件的最开头的几个用于唯一区别其它文件类型的字节,有了这些魔术数字,我们就可以很方便的区别不同的文件,这也使得编程变得更加容易,因为我减少了我们用于区别一个文件的文件类型所要花费的时间。 比如,一个JPEG文件,它开头的一些字节可能是类似这样的”ffd8 ffe0 0010 4a46 4946 0001 010...

shell学习笔记之正则表达式

一:知识背景 sed -i ' /PermitRootLogin no/ s/^.*$/PermitRootLogin yes/g' /etc/ssh/sshd_config 正则表达式的作用实在太强大了!!!! linux三剑客grep、awk、sed的强大是和正则分不开的,正则说到最基本的就是:从文件或者命令输出过滤文本。正则就是一些特殊字符串的集合...

JVM启动参数详解 (转)

非标准参数 非标准参数又称为扩展参数,其列表如下:-Xint设置jvm以解释模式运行,所有的字节码将被直接执行,而不会编译成本地码。-Xbatch关闭后台代码编译,强制在前台编译,编译完成之后才能进行代码执行;默认情况下,jvm在后台进行编译,若没有编译完成,则前台运行代码时以解释模式运行。-Xbootclasspath:bootclasspath让jv...

精准准确的统一社会信用代码正则(js)

参照标准: 《GB_32100-2015_法人和其他组织统一社会信用代码编码规则.》按照编码规则:统一代码为18位,统一代码由十八位的数字或大写英文字母(不适用I、O、Z、S、V)组成,由五个部分组成:第一部分(第1位)为登记管理部门代码,9表示工商部门;(数字或大写英文字母)第二部分(第2位)为机构类别代码;(数字或大写英文字母)第三部分(第3-8位)为...

嵌入式 Linux下修改MAC地址

Linux下修改MAC地址 方法一: 1.关闭网卡设备ifconfig eth0 down2.修改MAC地址ifconfig eth0 hw ether MAC地址3.重启网卡ifconfig eth0 up 方法二:以上方法一修改后linux重启后MAC又恢复为原来的,为了下次启动时修改后的MAC仍有效,我们可以修改文件file:/etc/rc.d /...