AcWing 1225. 正则问题
发布日期:2021-05-12 17:10:52 浏览次数:17 分类:精选文章

本文共 577 字,大约阅读时间需要 1 分钟。

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

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

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

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

输入格式

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

输出格式

输出所给正则表达式能接受的最长字符串的长度。

数据范围

输入长度不超过100,保证合法。

输入样例:

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

输出样例:

6

做这道题,我们首先要明白什么叫正则表达式,建议看一下去了解一下什么交正则表达式。优先计算括号内的表达式,然后计算括号外的表达式,遇到|的时候我们可以从 ′ ∣ ′ '|' 的左右两侧中选择一个一个作为最长字符串长度之一。

思路:

构造成一个树去做。(类似于递归)
在这里插入图片描述
这里为了理解我们先引用一个:

在这里插入图片描述

刚开始看递归的时候我也是想不通怎么去计算不同优先级的算法,然后y总给出了一个递归建立树的思路,看着大佬的思路我就明白了如何去构造这个数。

代码如下:

#include
#include
using namespace std;string str;int k;int dfs(){ int res=0; while(k
>str; cout<
上一篇:AcWing 1243. 糖果 状态dp
下一篇:Acwing 1301. C 循环 扩展欧几里得算法

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月30日 21时10分59秒