【蓝桥杯】历届试题 正则问题(深度优先搜索dfs)(C++)

【蓝桥杯】历届试题 正则问题

问题描述

题目链接:正则问题
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  考虑一种简单的正则表达式:
  只由 x ( ) | 组成的正则表达式。
  小明想求出这个正则表达式能接受的最长字符串的长度。
  例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。
输入格式
  一个由x()|组成的正则表达式。输入长度不超过100,保证合法。
输出格式
  这个正则表达式能接受的最长字符串的长度。

样例输入
((xx|xxx)x|(x|xx))xx
样例输出
6

思路分析

思路参考:【蓝桥杯】历届试题 正则问题
强烈推荐这个博主!!!
它写的蓝桥杯题目思路非常清晰!!!

对于题目给出的正则表达式,由于其存在着多重括号,那么对于某个式子而言其就必然需要用到回溯算法来对上一层括号中的内容进行反馈。换言之,本题用搜索算法来进行求解是相当合适的
再看数据范围,输入字符串长度不超过100,这更一步确定了搜索算法的适用性。当然,是深度优先搜索 接下来就以搜索算法的视角对本题进行分析
(1)首先要知道,当程序一遇到”(”时,我们就需要进入一层dfs,这一层dfs的任务是确定在当前这对括号中其所能接受字符串的最大长度。尽管在当前的这对括号中,也许还有多重括号,但是请忽略掉这些,因为我们只需要关心当前dfs的当前搜索任务,更深一层的自然有其对应的dfs以完成。而当我们一遇到”)”(在当前dfs中),就

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值