题目
题解
DFS。
看代码好简单,但感觉真想不出来。
最初的思路是先去掉外层多余括号,再确定 | 的位置,以 | 作为分界线,递归左右两侧;如果没有 | ,那么就按括号进行分割,比如xx(x|xx)
分割成xx
和(x|xx)
,但是比较难实现,类似的(x|xx)xx
,反正不好实现;而且去掉外层多余括号也没实现出来。
代码
#include<bits/stdc++.h>
using namespace std;
int k = 0;
string s;
int dfs () {
int res = 0;
while (k < s.size()) {
if (s[k] == '(') {
k ++;
res += dfs ();
k ++;
} else if (s[k] == ')') {
break;
} else if (s[k] == 'x') {
res ++;
k ++;
} else if (s[k] == '|') {
k ++;
res = max(res, dfs ());
}
}
return res;
}
int main()
{
cin >> s;
cout << dfs () << endl;
return 0;
}