当前位置: 首页 > article >正文

【蓝桥杯】43694.正则问题

题目描述

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

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

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

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

输入描述

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

输出描述

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

输入输出样例

示例

输入

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

输出

6

题目解析

((xx|xxx)x|(x|xx))xx 该表达式为什么最大可接受的字符串长度是6?

先明白算法规则:
  “|” 代表的是分支,比如 “xx|xxx” 就代表字符串有两种可能性,一种是xx,另外一种是xxx,所以,我们需要判断哪个分支能接受更多的字符串,在每个分支中,每遇到一个"x",可接受的字符串长度就+1;
  “()”代表的是优先级,也就是深度,每当遇到“(”,我们都需要进行递归调用进入下一层,当遇到“)”,则结束调用返回上一层。

((xx|xxx)x|(x|xx))xx 这个表达式用一个类似于二叉树的结构表示是这样的:
在这里插入图片描述
  通过上图明显可以看出,(xx|xxx)x 这一段,最大可接受的字符串长度为4,(x|xx)这一段,最大可接受的字符串长度为2,(xx|xxx)x 和 (x|xx) 处在同一层,用“|” 分开,所以 ((xx|xxx)x|(x|xx)) 取得这两个分支中的最大可接受的字符串长度为4,然后原字符串后面还有两个 “xx”,相加之后,该正则表达式的最大可接受的字符串长度就是 4 + 2 = 6 个。

程序步骤

  这个算法通过深度优先搜索的方式,遍历整个正则表达式,对于每个 ( 会进入新的递归调用,对于 | 会进行分支处理,对于 x 会增加当前长度,对于 ) 会更新结果并返回,最终得到能接受的最长字符串的长度。

  1. 首先,程序从输入中读取一个由 x、(、)、| 组成的正则表达式,并存储在变量 s 中。
  2. 初始化两个变量 pos 和 length,分别表示当前处理的位置和输入字符串的长度。
  3. 定义一个名为 dfs 的深度优先搜索函数:
      函数内部使用 ans 存储最终的最大长度,temp 存储当前正在处理的长度。
      进入 while 循环,只要 pos 小于 length,就会不断进行以下操作:
        当遇到 ( 时,将 pos 加一,然后递归调用 dfs 函数,并将其结果累加到 temp 中。
        当遇到 x 时,将 pos 加一,同时 temp 加一,表示找到了一个 x,长度加一。
        当遇到 | 时,将 pos 加一,更新 ans 为 ans 和 temp 中的最大值,将 temp 重置为 0,意味着开始新的分支处理。
        当遇到 ) 时,将 pos 加一,更新 ans 为 ans 和 temp 中的最大值,将 temp 重置为 0,同时返回 ans。
      循环结束后,处理类似 xx|xxxxx 这样的情况,更新 ans 为 ans 和 temp 中的最大值。
  4. 调用 dfs 函数,并将结果存储在 x 中。
  5. 打印出最终结果。

代码实现

感谢 @李时城 同学提供的代码,这是添加注释之后的版本。

import os
import sys# 读取输入的正则表达式
s = input()
# 初始化位置和长度
pos, length = 0, len(s)def dfs():# 声明使用全局变量 pos 和 lengthglobal pos, length# 存储最终结果和临时结果ans, temp = 0, 0while pos < length:# 遇到左括号,位置加一,递归调用 dfs 函数,并将结果累加到 temp 中if s[pos] == '(':pos += 1temp += dfs()# 遇到 'x',位置加一,temp 加一elif s[pos] == 'x':pos += 1temp += 1# 遇到 '|',位置加一,更新 ans 为 ans 和 temp 中的最大值,重置 tempelif s[pos] == '|':pos += 1ans = max(ans, temp)temp = 0# 遇到右括号,位置加一,更新 ans 为 ans 和 temp 中的最大值,返回 anselif s[pos] == ')':pos += 1ans = max(temp, ans)# temp = 0return ans# 处理类似 xx|xxxxx 的情况ans = max(ans, temp)return ans# 调用 dfs 函数
x = dfs()
print(x)

相关文章:

【蓝桥杯】43694.正则问题

题目描述 考虑一种简单的正则表达式&#xff1a; 只由 x ( ) | 组成的正则表达式。 小明想求出这个正则表达式能接受的最长字符串的长度。 例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是&#xff1a; xxxxxx&#xff0c;长度是 6。 输入描述 一个由 x()| 组成的正则表达式。…...

服务器虚拟化技术详解与实战:架构、部署与优化

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 引言 在现代 IT 基础架构中&#xff0c;服务器虚拟化已成为提高资源利用率、降低运维成本、提升系统灵活性的重要手段。通过服务…...

git困扰的问题

.gitignore中添加的某个忽略文件并不生效 把某些目录或文件加入忽略规则&#xff0c;按照上述方法定义后发现并未生效&#xff0c; gitignore只能忽略那些原来没有被追踪的文件&#xff0c;如果某些文件已经被纳入了版本管理中&#xff0c;则修改.gitignore是无效的。 解决方…...

jvm--类的生命周期

学习类的生命周期之前&#xff0c;需要了解一下jvm的几个重要的内存区域&#xff1a; &#xff08;1&#xff09;方法区&#xff1a;存放已经加载的类信息、常量、静态变量以及方法代码的内存区域 &#xff08;2&#xff09;常量池&#xff1a;常量池是方法区的一部分&#x…...

定制Centos镜像(一)

环境准备&#xff1a; 一台最小化安装的干净的系统&#xff0c;这里使用Centos7.9,一个Centos镜像&#xff0c;镜像也使用Centos7.9的。 [rootlocalhost ~]# cat /etc/system-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]# rpm -qa | wc -l 306 [rootloca…...

C语言------数组思维导图

...

TensorFlow实现逻辑回归模型

逻辑回归是一种经典的分类算法&#xff0c;广泛应用于二分类问题。本文将介绍如何使用TensorFlow框架实现逻辑回归模型&#xff0c;并通过动态绘制决策边界和损失曲线来直观地观察模型的训练过程。 数据准备 首先&#xff0c;我们准备两类数据点&#xff0c;分别表示两个不同…...

《十七》浏览器基础

浏览器&#xff1a;是安装在电脑里面的一个软件&#xff0c;能够将页面内容渲染出来呈现给用户查看&#xff0c;并让用户与网页进行交互。 常见的主流浏览器&#xff1a; 常见的主流浏览器有&#xff1a;Chrome、Safari、Firefox、Opera、Edge 等。 输入 URL&#xff0c;浏览…...

Windows 靶机常见服务、端口及枚举工具与方法全解析:SMB、LDAP、NFS、RDP、WinRM、DNS

在渗透测试中&#xff0c;Windows 靶机通常会运行多种服务&#xff0c;每种服务都有其默认端口和常见的枚举工具及方法。以下是 Windows 靶机常见的服务、端口、枚举工具和方法的详细说明&#xff1a; 1. SMB&#xff08;Server Message Block&#xff09; 端口 445/TCP&…...

IME关于输入法横屏全屏显示问题-Android14

IME关于输入法横屏全屏显示问题-Android14 1、输入法全屏模式updateFullscreenMode1.1 全屏模式判断1.2 全屏模式布局设置 2、应用侧关闭输入法全屏模式2.1 调用输入法的应用设置flag2.2 继承InputMethodService.java的输入法应用覆盖onEvaluateFullscreenMode方法 InputMethod…...

网络安全 | F5-Attack Signatures-Set详解

关注&#xff1a;CodingTechWork 创建和分配攻击签名集 可以通过两种方式创建攻击签名集&#xff1a;使用过滤器或手动选择要包含的签名。  基于过滤器的签名集仅基于在签名过滤器中定义的标准。基于过滤器的签名集的优点在于&#xff0c;可以专注于定义用户感兴趣的攻击签名…...

STranslate 中文绿色版即时翻译/ OCR 工具 v1.3.1.120

STranslate 是一款功能强大且用户友好的翻译工具&#xff0c;它支持多种语言的即时翻译&#xff0c;提供丰富的翻译功能和便捷的使用体验。STranslate 特别适合需要频繁进行多语言交流的个人用户、商务人士和翻译工作者。 软件功能 1. 即时翻译&#xff1a; 文本翻译&#xff…...

基于微信小程序的助农扶贫系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

我谈区域偏心率

偏心率的数学定义 禹晶、肖创柏、廖庆敏《数字图像处理&#xff08;面向新工科的电工电子信息基础课程系列教材&#xff09;》P312 区域的拟合椭圆看这里。 Rafael Gonzalez的二阶中心矩的表达不说人话。 我认为半长轴和半短轴不等于特征值&#xff0c;而是特征值的根号。…...

关于低代码技术架构的思考

我们经常会看到很多低代码系统的技术架构图&#xff0c;而且经常看不懂。是因为技术架构图没有画好&#xff0c;还是因为技术不够先进&#xff0c;有时候往往都不是。 比如下图&#xff1a; 一个开发者&#xff0c;看到的视角往往都是技术层面&#xff0c;你给用户讲React18、M…...

若依路由配置教程

1. 路由配置文件 2. 配置内容介绍 { path: "/tool/gen-edit", component: Layout, //在路由下&#xff0c;引用组件的名称&#xff0c;在页面中包括这个组件的内容(页面框架内容) hidden: true, //此页面的内容&#xff0c;在左边的菜单中不用显示。 …...

基于ESP8266的多功能环境监测与反馈系统开发指南

项目概述 本系统集成了物联网开发板、高精度时钟模块、环境传感器和可视化显示模块&#xff0c;构建了一个智能环境监测与反馈装置。通过ESP8266 NodeMCU作为核心控制器&#xff0c;结合DS3231实时时钟、DHT11温湿度传感器、光敏电阻和OLED显示屏&#xff0c;实现了环境参数的…...

【Elasticsearch】doc_values 可以用于查询操作

确实&#xff0c;doc values 可以用于查询操作&#xff0c;尽管它们的主要用途是支持排序、聚合和脚本中的字段访问。在某些情况下&#xff0c;Elasticsearch 也会利用 doc values 来执行特定类型的查询。以下是关于 doc values 在查询操作中的使用及其影响的详细解释&#xff…...

HTML5 Web Worker 的使用与实践

引言 在现代 Web 开发中&#xff0c;用户体验是至关重要的。如果页面在执行复杂计算或处理大量数据时变得卡顿或无响应&#xff0c;用户很可能会流失。HTML5 引入了 Web Worker&#xff0c;它允许我们在后台运行 JavaScript 代码&#xff0c;从而避免阻塞主线程&#xff0c;保…...

flutter_学习记录_00_环境搭建

1.参考文档 Mac端Flutter的环境配置看这一篇就够了 flutter的中文官方文档 2. 本人环境搭建的背景 本人的电脑的是Mac的&#xff0c;iOS开发&#xff0c;所以iOS开发环境本身是可用的&#xff1b;外加Mac电脑本身就会配置Java的环境。所以&#xff0c;后面剩下的就是&#x…...

自助设备系统设置——对接POS支付

输入管理员密码 一、录入POS网关信息 填写网关信息后保存&#xff0c;重新启动软件...

Calibre(阅读转换)-官方开源中文版[完整的电子图书馆系统,包括图书馆管理,格式转换,新闻,材料转换为电子书]

Calibre(阅读&转换)-官方开源中文版 链接&#xff1a;https://pan.xunlei.com/s/VOHbKYUwd3ASVXTi2Ok1vkK3A1?pwd92ny#...

2748. 美丽下标对的数目(Beautiful Pairs)

2748. 美丽下标对的数目&#xff08;Beautiful Pairs&#xff09; 题目分析 给定一个整数数组 nums&#xff0c;我们需要找出其中符合条件的“美丽下标对”。美丽下标对是指&#xff0c;数组中的某一对数字 nums[i] 和 nums[j]&#xff08;其中 0 ≤ i < j < nums.leng…...

【unity游戏开发之InputSystem——06】PlayerInputManager组件实现本地多屏的游戏(基于unity6开发介绍)

文章目录 PlayerInputManager 简介1、PlayerInputManager 的作用2、主要功能一、PlayerInputManager组件参数1、Notification Behavior 通知行为2、Join Behavior:玩家加入的行为3、Player Prefab 玩家预制件4、Joining Enabled By Default 默认启用加入5、Limit Number Of Pl…...

算法刷题Day29:BM67 不同路径的数目(一)

题目链接 描述 解题思路&#xff1a; 二维dp数组初始化。 dp[i][0] 1, dp[0][j] 1 。因为到达第一行第一列的每个格子只能有一条路。状态转移 dp[i][j] dp[i-1][j] dp[i][j-1] 代码&#xff1a; class Solution: def uniquePaths(self , m: int, n: int) -> int: #…...

c语言网 1130数字母

原题 题目描述 输入一个字符串,数出其中的字母的个数. 输入格式 一个字符串&#xff0c;不包含空格&#xff08;长度小于100&#xff09; 输出格式 字符串中的字母的个数 样例输入 复制 124lfdk54AIEJ92854&%$GJ 样例输出 复制 10 #include<iostream> #include<cc…...

UG二开UF-常用方法

1&#xff0c;带有星号的TAG用法 UF_OPER_ask_cutter_group&#xff08;tag_t oper,tag_t * group&#xff09; 2.使用string头文件 #include <afxwin.h> tag_t dj NULL; UF_OPER_ask_cutter_group(objects[0],&dj);//查询指定操作所在的刀具组tag 2&#xff0…...

美国本科申请文书PS写作中的注意事项

在完成了introduction之后&#xff0c;便可进入到main body的写作之中。美国本科申请文书PS的写作不同于学术论文写作&#xff0c;要求你提出论点进行论证之类。PS更多的注重对你自己的经历或者motivation的介绍和描述。而这一描述过程只能通过对你自己的过往的经历的展现才能体…...

内存泄漏的通用排查方法

本文聊一聊如何系统性地分析查找内存泄漏的具体方法&#xff0c;但不会具体到哪种语言和具体业务代码逻辑中&#xff0c;而是会从 Linux 系统上通用的一些分析方法来入手。这样&#xff0c;不论你使用什么开发语言&#xff0c;不论你在开发什么&#xff0c;它总能给你提供一些帮…...

【Python】第五弹---深入理解函数:从基础到进阶的全面解析

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】【Python】 目录 1、函数 1.1、函数是什么 1.2、语法格式 1.3、函数参数 1.4、函数返回值 1.5、变量作用域 1.6、函数…...