news 2026/4/18 7:58:30

2.3.蓝桥杯-正则问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2.3.蓝桥杯-正则问题

题目描述

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

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

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

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

输入描述

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

输出描述

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

输入输出样例

示例

输入

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

输出

6

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

参考代码:

package Practice2; import java.util.Scanner; public class Main { /*定义全局变量记录正则表达式,之所以要定义成全局变量,是为了递归调用, * 如果是局部变量,那么处理正则表达式的函数的形参就需要是正则表达式, * 每一次递归都需要重新把整个正则表达式进行处理,不符合需求*/ static String str = null; /*定义索引记录处理到正则表达式哪一个字符*/ static int index = -1; //初值为-1,表示一开始没有字符 public static void main(String[] args) { /*题目中正则表达式由字符x、(、)、|构成*/ /*1.输入正则表达式*/ Scanner sc = new Scanner(System.in); str = sc.next(); /*2.调用method方法得出正则表达式能接受的最长字符串的长度*/ int result = method(); /*3.输出结果*/ System.out.println(result); } //用来统计正则表达式能接受的最长字符串的长度的方法 private static int method() { /*1.记录目前x的最大个数*/ int current = 0; /*2.记录最终x的最大个数*/ int max = 0; /*3.循环处理正则表达式*/ while (index < str.length() - 1) { //这里之所以用index < str.length()-1,是防止越界。因为如果是index < str.length(),当index等于str.length()-1时,index++就越界了 index++; //注:要处理的是字符 if (str.charAt(index) == 'x') { /*3.1.处理x时只需要个数自增*/ current++; } else if (str.charAt(index) == '(') { /*3.2.遇到(时需要递归调用,因为(中有一个新的子表达式,这个子表达式需要独立计算, 计算完成后,结果要返回给外层表达式*/ current = current + method(); } else if (str.charAt(index) == ')') { /*3.3.遇到)时意味着括号处理完毕,结束本轮循环*/ break; } else if (str.charAt(index) == '|') { /*3.2.遇到|时就需要判断|左、右两侧谁的正则长度大*/ max = Math.max(current, max); //关键:此时current就需要清0,current的之前值被max记录,新的值重新计算 current = 0; } } /*4.返回正则表达式最大长度*/ return Math.max(current, max); } }

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 21:42:31

技术演进中的开发沉思-344:Javac 编译器(中)

今天继续Javac 编译器&#xff0c;这属于 Java 的早期编译 / 前端编译&#xff0c;和之前讲的 JIT&#xff08;运行时后端编译&#xff09;完全不同 —— 它的核心作用是把Java 源码&#xff08;.java&#xff09; 编译为平台无关的字节码&#xff08;.class&#xff09;&#…

作者头像 李华
网站建设 2026/4/17 16:03:09

虚拟线程生产事故复盘:警惕高性能背后的陷阱

引言 Java 19 引入虚拟线程&#xff08;Virtual Threads&#xff09;作为 Project Loom 的重要成果&#xff0c;这项技术被誉为 Java 并发编程的革命性进步。 能用更低的内存支持数百万并发任务&#xff0c;听起来特别美好&#xff0c;让开发者可以摆脱传统线程池的束缚。 结果…

作者头像 李华
网站建设 2026/4/17 19:07:32

收藏!AI 大模型时代,Java 程序员的高薪转型之路(小白必看)

试想这样的全新编程场景&#xff1a;打开多个 Claude Code 对话窗口&#xff0c;为每个窗口赋予专属 “岗位职能”—— 一个专攻前端页面的快速编写&#xff0c;一个聚焦后端业务逻辑的开发实现&#xff0c;一个专注测试用例的设计与校验&#xff0c;还有一个专门解决编码过程中…

作者头像 李华
网站建设 2026/4/18 5:41:49

深度测评10个降AIGC平台 千笔AI帮你轻松降AI率

深度测评10个降AIGC平台 千笔AI帮你轻松降AI率 AI降重工具&#xff1a;让论文更自然&#xff0c;更安全 在当今学术写作中&#xff0c;越来越多的学生开始借助AI工具进行论文撰写。然而&#xff0c;随着各大高校对AIGC&#xff08;人工智能生成内容&#xff09;检测的重视&am…

作者头像 李华