正则问题(lanqiao.cn)带条件的最长路径+ 碰到()下一层+碰到|去两层最大
作者:
dpking
,
2025-03-08 14:03:19
· 重庆
,
所有人可见
,
阅读 1
#include<bits/stdc++.h>
using namespace std;
string s;
int k = 0;
int dfs()//碰到( +里面的值值,碰到|在当前层和右边的值去取一个最大值,碰到)不做处理,在(已经处理。
{
int res = 0; //统计当前层可以容纳多少x
while(k < s.size())
{
if(s[k] == '(')
{
k++; //跳过左括号
res += dfs();
k++; //跳过右括号
}else if(s[k] == '|')
{
k++; //跳过 或 运算
res = max(res, dfs()); //求解下一层的x
// k++;(注意,只需要在条件1跳过一次右括号即可,|是从属于某层递归的,等待递归结束之后,自动跳过右括号即可)
}else if(s[k] == ')')
break;
else
{
k++;
res++;
}
}
return res;
}
int main()
{
cin >> s;
cout << dfs() << endl;
return 0;
}