参照
:
我々は検討する必要がある場合には、「()」と「|」、我々は見つける「()」括弧の役割は、上記のコードと言うことです範囲を定義し、我々は単にコードを聞かせて「(」1からの実行を開始A ")" これまでに。
それでは、どのよう我々はそれを制御するために、これを行うことができますか?
私たちは、サンプルの計算を分析することができます。
括弧の面では、まず今回の端部が算出した後、ブラケットを計算するに、我々は計算を続行する結果を返す、現在の計算を終了します。
これは、深い検索で、バックトラックは、(第四の質問にそれを覚えている)プロセスに非常によく似ています。
だから我々は、計算を完了するために、深い方法を見つけました。会ったとき、「()」は、我々は新しい関数を入力し、計算を続行するには、この関数の戻り値を使用します。
#include <iostream>
#include <string>
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;
}