1class Solution {2public:3bool parseBoolExpr(string e) {4auto it = e.begin();5return parse(it);6}78bool parse(string::iterator &it) {9switch (*(it++)) {10case 't':11return true;12case 'f':13return false;14case '|':15return parse(it, false, [](bool init, bool val) { return init || val; });16case '&':17return parse(it, true, [](bool init, bool val) { return init && val; });18case '!':19return parse(it, false, [](bool init, bool val) { return !val; });20}21return false;22}2324bool parse(string::iterator &it, bool init, function<bool(bool, bool)> op) {25it++; // skip '('26while (true) {27auto b = parse(it);28init = op(init, b);29if (*it == ')') break;30it++; // skip ','31}32it++; // skip ')'33return init;34}35};