【蓝桥杯】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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/66530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac m1下载maven安装并配置环境变量

下载地址&#xff1a;Download Apache Maven – Maven 解压到一个没有中文和空格的文件夹 输入pwd查看安装路径 输入cd返回根目录再输入 code .zshrc 若显示 command not found: code你可以通过以下步骤来安装和配置 code 命令&#xff1a; 1. 确保你已经安装了 Visual Studio…

【自己动手开发Webpack插件:开启前端构建工具的个性化定制之旅】

在前端开发的世界里&#xff0c;Webpack无疑是构建工具中的“明星”。它强大的功能可以帮助我们高效地打包和管理前端资源。然而&#xff0c;有时候默认的Webpack功能可能无法完全满足我们的特定需求&#xff0c;这时候就需要自定义Webpack插件来大展身手啦&#xff01;今天&am…

移远通信多模卫星通信模组BG95-S5获得Skylo网络认证,进一步拓展全球卫星物联网市场

近日&#xff0c;全球领先的物联网整体解决方案供应商移远通信正式宣布&#xff0c;其支持“卫星蜂窝”多模式的高集成度NTN卫星通信模组BG95-S5已成功获得NTN网络运营商Skylo的网络认证。BG95-S5也成为了获得该认证的最新款移远卫星通信模组。 BG95-S5模组顺利获得Skylo认证&a…

1.3.浅层神经网络

目录 1.3.浅层神经网络 1.3.1 浅层神经网络表示 1.3.2 单个样本的向量化表示 1.3.4 激活函数的选择 1.3.5 修改激活函数 1.3.5 练习​​​​​​​ 1.3.浅层神经网络 1.3.1 浅层神经网络表示 之前已经说过神经网络的结构了&#xff0c;在这不重复叙述。假设我们有如下…

StarRocks强大的实时数据分析

代码仓库&#xff1a;https://github.com/StarRocks/starrocks?tabreadme-ov-file StarRocks | A High-Performance Analytical Database 快速开始&#xff1a;StarRocks | StarRocks StarRocks 是一款高性能分析型数据仓库&#xff0c;使用向量化、MPP 架构、CBO、智能物化…

2024年博客之星主题创作|猫头虎分享AI技术洞察:2025年AI发展趋势前瞻与展望

2025年AI发展趋势前瞻&#xff1a;猫头虎深度解析未来科技与商业机遇 摘要 2024年&#xff0c;AI技术迎来爆发式增长&#xff0c;AIGC、智能体、AIRPA、AI搜索、推理模型等技术不断突破&#xff0c;AI应用场景持续扩展。2025年&#xff0c;AI将进入全新发展阶段&#xff0c;W…

PG vs MySQL mvcc机制实现的异同

MVCC实现方法比较 MySQL 写新数据时&#xff0c;把旧数据写入回滚段中&#xff0c;其他人读数据时&#xff0c;从回滚段中把旧的数据读出来 PostgreSQL 写新数据时&#xff0c;旧数据不删除&#xff0c;直接插入新数据。 MVCC实现的原理 PG的MVCC实现原理 定义多版本的数据…

Android SystemUI——CarSystemBar视图解析(十一)

前面文章我们已经把 CarSystemBar 从启动到构建视图,再到将视图添加到 Window 的流程分析完毕,我们知道默认情况下在车载系统中只显示顶部栏和底部栏视图的。这里我们在前面文章的基础上以顶部栏为例具体解析其视图的结构。 一、顶部栏解析 通过《CarSystemBar车载状态栏》这…

51c~ONNX~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/11608027 一、使用Pytorch进行简单的自定义图像分类 ~ONNX 推理 图像分类是计算机视觉中的一项基本任务&#xff0c;涉及训练模型将图像分类为预定义类别。本文中&#xff0c;我们将探讨如何使用 PyTorch 构建一个简单的自定…

每打开一个chrome页面都会【自动打开F12开发者模式】,原因是 使用HBuilderX会影响谷歌浏览器的浏览模式

打开 HBuilderX&#xff0c;点击 运行 -> 运行到浏览器 -> 设置web服务器 -> 添加chrome浏览器安装路径 chrome谷歌浏览器插件 B站视频下载助手插件&#xff1a; 参考地址&#xff1a;Chrome插件 - B站下载助手&#xff08;轻松下载bilibili哔哩哔哩视频&#xff09…

go语言之OOP特性和演示

一、OOP特性 Go语言中的OOP特性 结构体&#xff1a;在Go中&#xff0c;结构体用于定义复合类型&#xff0c;类似于其他语言中的类。它可以包含字段&#xff08;属性&#xff09;和方法&#xff08;行为&#xff09;。方法&#xff1a;Go允许为任何自定义类型&#xff08;包括…

USB3020任意波形发生器4路16位同步模拟量输出卡1MS/s频率 阿尔泰科技

信息社会的发展&#xff0c;在很大程度上取决于信息与信号处理技术的先进性。数字信号处理技术的出现改变了信息 与信号处理技术的整个面貌&#xff0c;而数据采集作为数字信号处理的必不可少的前期工作在整个数字系统中起到关键 性、乃至决定性的作用&#xff0c;其应用已经深…

ChatGPT大模型极简应用开发-目录

引言 要理解 ChatGPT&#xff0c;了解其背后的 Transformer 架构和 GPT 技术一路的演进则变得非常必要。 ChatGPT 背后的 LLM 技术使普通人能够通过自然语言完成过去只能由程序员通过编程语言实现的任务&#xff0c;这是一场巨大的变革。然而&#xff0c;人类通常容易高估技术…

C++入门基础篇:域、C++的输入输出、缺省参数、函数重载、引用、inline、nullptr

本篇文章是对C学习前期的一些基础部分的学习分享&#xff0c;希望也能够对你有所帮助。 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 目录 1.第一个C程序 2. 域 3. namespace 3.1 namespace的作用 3.2 namespace的定义 3.3 namespace使用说明 4.C的输入和输出…

RabbitMQ---TTL与死信

&#xff08;一&#xff09;TTL 1.TTL概念 TTL又叫过期时间 RabbitMQ可以对队列和消息设置TTL&#xff0c;当消息到达过期时间还没有被消费时就会自动删除 注&#xff1a;这里我们说的对队列设置TTL,是对队列上的消息设置TTL并不是对队列本身&#xff0c;不是说队列过期时间…

先进制造aps专题二十七 西门子opcenter aps架构分析

欧美的商业aps&#xff0c;主要就是sap apo,西门子opcenter aps,达索quintiq 从技术的层面&#xff0c;西门子aps是不如sap apo的&#xff0c;但是西门子aps是西门子数字化工厂产品的核心&#xff0c;有很多特色&#xff0c;所以分析 西门子aps主要分计划器和排产器两个部分 计…

WPF如何跨线程更新界面

WPF如何跨线程更新界面 在WPF中&#xff0c;类似于WinForms&#xff0c;UI控件只能在UI线程&#xff08;即主线程&#xff09;上进行更新。WPF通过Dispatcher机制提供了跨线程更新UI的方式。由于WPF的界面基于Dispatcher线程模型&#xff0c;当你在非UI线程&#xff08;例如后…

ingress-nginx代理tcp使其能外部访问mysql

一、helm部署mysql主从复制 helm repo add bitnami https://charts.bitnami.com/bitnami helm repo updatehelm pull bitnami/mysql 解压后编辑values.yaml文件&#xff0c;修改如下&#xff08;storageclass已设置默认类&#xff09; 117 ## param architecture MySQL archit…

macOS Sequoia 15.3 beta3(24D5055b)发布,附黑、白苹果镜像下载地址

“ 镜像&#xff08;黑苹果引导镜像、白苹果Mac镜像、黑苹果虚拟机镜像&#xff09;下载地址&#xff1a;黑果魏叔官网。” 关于macOS Sequoia 15.3 beta3&#xff08;24D5055b&#xff09;&#xff0c;以下是对其的详细介绍&#xff1a; 一、版本发布信息 发布时间 &#xf…

豪越科技消防一体化安全管控平台:推动消防作训模式智慧转型

在当今数字化浪潮席卷全球的时代背景下&#xff0c;各行业都在积极寻求创新与变革&#xff0c;以提升工作效率、优化管理流程。消防行业作为保障社会安全的关键领域&#xff0c;其数字化转型的需求尤为迫切。豪越科技的消防一体化安全管控平台应运而生&#xff0c;为消防工作带…