蓝桥杯-正则表达式
发布日期:2022-02-08 04:20:48 浏览次数:3 分类:技术文章

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

参考

当我们需要同时考虑“()”和“|”时,我们发现“()”括号的作用就是讲上面的代码限定了一个范围,所以我们只需要让这段代码从一个“(”开始运行到一个“)”为止。

那么怎么才能做到这种控制呢?

我们可以分析一下样例的计算过程。

在遇到一个括号时,我们会先终止当前的计算,进入到括号里进行计算,当这一次计算结束后,我们返回这个结果继续计算。

这是一个和深搜回溯很相似的过程(还记得第四题吗)。

所以我们用深搜的方式来完成计算。在遇到一对“()”时,我们就进入一个新的函数,然后用这个函数的返回值继续计算。

#include 
#include
using namespace std;string str;int pos, len;int dfs() { int num = 0, res = 0; while (pos < len) { if (str[pos] == '(') { pos++; num += dfs(); } else if (str[pos] == ')') { pos++; break; } else if (str[pos] == '|') { pos++; res = max(num, res); num = 0; } else { pos++; num++; } } res = max(num, res); return res;}int main() { cin >> str; int ans = 0; len = str.length(), pos = 0; ans = dfs(); cout << ans << endl; return 0;}

转载地址:https://blog.csdn.net/weixin_38960774/article/details/79413463 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:分巧克力
下一篇:博弈游戏

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年03月30日 14时13分11秒