递归问题可以转换成树来做,该题样例 ((xx|xxx)x|(x|xx))xx ,转换成树如下:
代码
#include <bits/stdc++.h>
using namespace std;
int k;
string s;
int dfs() {
int res = 0;
while (k < s.size()) {
if (s[k] == '(') {
k++;
res += dfs();
k++;
}
else if (s[k] == '|') {
k++;
res = max(res, dfs());
}
else if (s[k] == ')') break;
else {
res++;
k++;
}
}
return res;
}
int main(void) {
cin >> s;
cout << dfs();
return 0;
}