算法1
思路:深搜
可以理解为二叉树,
第一种情况:如果遇到左括号,k表示跳过这一步,然后深搜,遇到右括号结束,k表示跳过这个字符
第二种情况:如果遇见|,表示在或符号的左右两遍取最大值,但还是要注意,k别忘了,要跳过这个符号
第三种情况:如果遇见右括号,直接跳出循环
第四种:就是遇见x,答案加加,我第一次忘记k,结果超时了
C++ 代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int k;
string str;
int dfs()
{
int res=0;
while(k<str.size())
{
if(str[k]=='(')//处理 (....)
{
k++;//跳过'('
res+=dfs();
k++;//跳过')'
}
else if(str[k]=='|')
{
k++;//跳过 |
res=max(res,dfs());
}
else if(str[k]==')') break;
else
{ k++;
res++;
}
}
return res;
}
int main()
{
cin>>str;
cout<<dfs()<<endl;
return 0;
}