藍橋杯-正則表示式
阿新 • • 發佈:2019-01-01
參考
:
當我們需要同時考慮“()”和“|”時,我們發現“()”括號的作用就是講上面的程式碼限定了一個範圍,所以我們只需要讓這段程式碼從一個“(”開始執行到一個“)”為止。
那麼怎麼才能做到這種控制呢?
我們可以分析一下樣例的計算過程。
在遇到一個括號時,我們會先終止當前的計算,進入到括號裡進行計算,當這一次計算結束後,我們返回這個結果繼續計算。
這是一個和深搜回溯很相似的過程(還記得第四題嗎)。
所以我們用深搜的方式來完成計算。在遇到一對“()”時,我們就進入一個新的函式,然後用這個函式的返回值繼續計算。
#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; }